C#3.0语言新特性之Lambda表达式
2009-03-12 08:19:19 来源:WEB开发网l 如果L具有隐式类型的参数列表,当推断出来的类型被P中的方法类型参数取代了并且作为结果的参数类型赋给了L时,L的表达式体必须是一个有效的表达式或语句块。
l 可以为L推断一个返回值类型。
对于每一个这样的参数,都是通过关联P的返回值类型和从L推断出的返回值类型来从其上进行推断的,并且新的推断将被添加到累积的推断集合中。这个过程一直重复,直到无法进行更多的推断为止。
在类型推断和重载抉择中,Lambda表达式L的“推断出来的返回值类型”通过以下步骤进行检测:
l 如果L的表达式体是一个表达式,则该表达式的类型就是L的推断出来的返回值类型。
l 如果L的表达式体是一个语句块,若由该块中的return语句中的表达式的类型形成的集合中恰好包含一个类型,使得该集合中的每个类型都能隐式地转换为该类型,并且该类型不是一个空类型,则该类型即是L的推断出来的返回值类型。
l 除此之外,无法从L推断出一个返回值类型。
作为包含了Lambda表达式的类型推断的例子,请考虑System.Query.Sequence类中声明的Select扩展方法:
namespace System.Query
{
public static class Sequence
{
public static IEnumerable<S> Select<T, S>(
this IEnumerable<T> source,
Func<T, S> selector)
{
foreach (T element in source) yield return selector(element);
}
}
}
更多精彩
赞助商链接