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

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

 2009-03-12 08:19:19 来源:WEB开发网   
核心提示: l D和L具有相同数量的参数;l 如果L具有显式类型的参数列表,D中每个参数的类型和修饰符必须和L中相应的参数完全一致;l 如果L具有隐式类型的参数列表,C#3.0语言新特性之Lambda表达式(4),则D中不能有ref或out参数;l 如果D具有void返回值类型,并且L的表达式体是一个

l         D和L具有相同数量的参数;

l         如果L具有显式类型的参数列表,D中每个参数的类型和修饰符必须和L中相应的参数完全一致;

l         如果L具有隐式类型的参数列表,则D中不能有ref或out参数;

l         如果D具有void返回值类型,并且L的表达式体是一个表达式,若L的每个参数的类型与D的参数一致,则L的表达式体必须是一个可接受为statement-expression的有效表达式;

l         如果D具有void返回值类型,并且L的表达式体是一个语句块,若L的每个参数的类型与D的参数一致,则L的表达式体必须是一个有效语句块,并且该语句块中不能有带有表达式的return语句;

l         如果D的返回值类型不是void,并且L的表达式体是一个表达式,若L的每个参数的类型与D的参数一致,则L的表达式体必须是一个可以隐式转换为D的返回值类型的有效表达式;

l         如果D的返回值类型不是void,并且L的表达式体是一个语句块,若L的每个参数的类型与D的参数一致,则L的表达式体必须是一个有效的语句块,该语句块不能有可达的终点(即必须有return语句),并且每个return语句中的表达式都必须能够隐式转换为D的返回值类型。

后面的例子将使用一个范型委托F<U, T>表示一个函数,它具有一个类型为U的参数u,返回值类型为T:

delegate T F<U, T>(U u);

 

我们可以像在下面这样赋值:

F<int, int> f1 = x => x + 1;          

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

每个Lambda表达式的参数和返回值类型通过将Lambda表达式赋给的变量的类型来检测。第一个赋值将Lambda表达式成功地转换为了委托类型Func<int, int>,因为x的类型是int,x + 1是一个有效的表达式,并且可以被隐式地转换为int。同样,第二个赋值成功地将Lambda表达式转换为了委托类型Func<int, double>,因为x + 1的结果(类型为int)可以被隐式地转换为double类型。

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

Tags:语言 特性 Lambda

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