-
详细介绍大彩串口屏中各组态控件的匿名函数转换
资源介绍
6.5 匿名函数转换
anonymous-method-expression 或 lambda-expression 被归类为匿名函数(第 7.15 节)。这个表达式没有类
型,但是可隐式转换为兼容的委托类型或表达式目录树类型。具体而言,匿名函数 F 与委托类型 D 兼容:
如果 F 包含 anonymous-function-signature,则 D 与 F 的形参个数相同。
如果 F 不包含 anonymous-function-signature,则 D 可以有零个或多个任意类型的形参,只要 D 的任
何形参都没有 out 形参修饰符。
如果 F 具有显式类型化形参列表,则 D 中的每个形参与 F 中的对应形参具有相同的类型和修饰符。
如果 F 具有隐式类型化形参列表,则 D 没有 ref 或 out 形参。
如果 F 的主体是一个表达式且 D 具有 void 返回类型,或 F 是异步的且 D 具有返回类型 Task,则将
F 的每个参数均指定为 D 中对应参数的类型时,F 的主体是有效表达式(请参考第 7 章),该表达
式将允许作为 statement-expression(第 8.6 节)。
如果 F 的主体是一个语句块且 D 具有 void 返回类型,或 F 是异步的且 D 具有返回类型 Task,则将
F 的每个参数均指定为 D 中对应参数的类型时,F 的主体是有效语句块(请参考第 8.2 节),在该语
句块中没有 return 语句指定了表达式。
在 F 的函数体为表达式时,如果 F 为非异步且 D 具有非空返回类型 T,或 F 为异步且 D 具有返回类
型 Task,则将 F 的每个参数均指定为 D 中对应参数的类型时,F 的函数体是有效表达式(请参
考第 7 节),该表达式可隐式转换为 T。
在 F 的函数体为语句块时,如果 F 为非异步且 D 具有非空返回类型 T,或 F 为异步且 D 具有返回类
型 Task,则将 F 的每个参数均指定为 D 中对应参数的类型时,F 的函数体是一个带有不可到达
的结束点的有效语句块(请参考第 8.2 节),在该语句块中每个 return 语句都指定一个可隐式转
换为 T 的返回类型的表达式。
为简洁起见,本节使用任务类型的简写 Task 和 Task(第 错误!未找到引用源。 节)。
如果 F 与委托类型 D 兼容,则 lambda 表达式 F 与表达式树类型 Expression 兼容。注意,这一点
不适用于匿名方法,而仅适用于 lambda 表达式
某些 lambda 表达式不能转换为表达式树类型:即使存在转换,该过程也会在编译时失败。lambda 表达
式符合以下条件时发生上述情况:
具有 block 体
包含简单或复合赋值运算符
包含动态绑定表达式
是异步的
下面的示例使用一个用于表示函数的泛型委托类型 Func,该函数采用一个类型为 A 的实参并返
回一个类型为 R 的值:
delegate R Func(A arg);
在下面的赋值中,
Func f1 = x => x + 1; // Ok
- 上一篇: 方法组转换-大彩串口屏各组态控件详细介绍
- 下一篇: C#的预处理指令--C#入门经典教程