如何将C#中的lambda表达式转换为非lambda的常规语法
C# Lambda表达式反向改写方案
原代码逻辑拆解
原代码中XmlSchema.Read方法的第二个参数是ValidationEventHandler类型的委托,用于接收XML Schema验证过程中的错误回调。你看到的(s, e) => {Debug.WriteLine("Xml schema validation error : " + e.Message);}就是对应委托的Lambda匿名实现。
无Lambda的改写版本
写法1:命名方法实现(无任何匿名语法,可读性最高)
首先在当前类中定义独立的错误处理方法:
// 验证错误处理方法,签名和ValidationEventHandler委托完全匹配 private void SchemaValidationErrorHandler(object sender, ValidationEventArgs e) { Debug.WriteLine("Xml schema validation error : " + e.Message); }
修改原调用代码,直接传入方法名作为委托参数:
XmlSchema schema = XmlSchema.Read(schemaStream, SchemaValidationErrorHandler);
注意:如果调用逻辑在静态方法中,需要给
SchemaValidationErrorHandler加上static修饰符。
写法2:匿名方法实现(无需额外定义独立方法,也不使用Lambda语法)
如果不想新增独立方法,可以用C#原生的匿名方法语法实现,和原代码结构更接近:
XmlSchema schema = XmlSchema.Read(schemaStream, delegate(object s, ValidationEventArgs e) { Debug.WriteLine("Xml schema validation error : " + e.Message); });
两种写法的运行效果和原Lambda版本完全一致。
内容的提问来源于stack exchange,提问作者zooid
相关产品推荐
相关产品推荐

