WEB开发网
开发学院软件开发C语言 C#3.0语言新特性之Lambda表达式 阅读

C#3.0语言新特性之Lambda表达式

 2009-03-12 08:19:19 来源:WEB开发网   
核心提示: 来看如下代码,如果这样赋值会怎么样?F<double, int> f3 = x => x + 1;我们运行上面的代码,C#3.0语言新特性之Lambda表达式(5),编译器会报如下两条错误:(1)无法将类型“double”隐式转换为“i

来看如下代码,如果这样赋值会怎么样?

F<double, int> f3 = x => x + 1;

我们运行上面的代码,编译器会报如下两条错误:

(1)无法将类型“double”隐式转换为“int”。存在一个显式转换(是否缺少强制转换?)。

(2)无法将Lambda表达式转换为委托类型“F<double,int>”,原因是块中的某些返回类型不能隐式转换为委托返回类型。

其实产生一个编译期错误原因是,x给定的类型是double,x + 1的结果(类型为double)不能被隐式地转换为int。

20.5.3 类型推断

当在没有指定类型参数的情况下调用一个范型方法时,一个类型推断过程会去尝试为该调用推断类型参数。被作为参数传递给范型方法的Lambda表达式也会参与这个类型推断过程。

最先发生的类型推断独立于所有参数。在这个初始阶段,不会从作为参数的Lambda表达式推断出任何东西。然而,在初始阶段之后,将通过一个迭代过程从Lambda表达式进行推断。特别地,当下列条件之一为真时将会完成推断:

l         参数是一个Lambda表达式,以后简称为L,从其中未得到任何推断;

l         相应参数的类型,以后简称为P,是一个委托类型,其返回值类型包括了一个或多个方法类型参数;

l         P和L具有相同数量的参数,P中每个参数的修饰符与L中相应的参数一致,或者如果L具有隐式类型的参数列表时,没有参数修饰符;

l         P的参数类型不包含方法类型参数,或仅包含于已经推断出来的类型参数相兼容的一组类型参数;

l         如果L具有显式类型的参数列表,当推断出来的类型被P中的方法类型参数取代了时,P中的每个参数应该具有和L中相应参数一致的类型。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:语言 特性 Lambda

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接