这是原始的 Linq:
var developersUsingCSharp =
from d in developers
where d.Language == "C#"
select d.Name;
这可以写成:
Func<Developer, bool> filteringPredicate = d => d.Language == "C#";
Func<Developer, string> selectionPredicate = d => d.Name;
IEnumerable<string> developersUsingCSharp =
developers
.Where(filteringPredicate)
.Select(selectionPredicate);
上面我们明确定义了 Func
Func<Developer, bool> filteringPredicate = d => d.Language == "C#";
已知d是Developer类型,返回类型是bool。同样,对于
Func<Developer, string> selectionPredicate = d => d.Name;
可知d是Developer类型,返回类型是string。但是,在同一查询的以下有效形式中,如何推断这些类型:
IEnumerable<string> developersUsingCSharp =
developers
.Where(d => d.Language == "C#")
.Select(d => d.Name);
最佳答案
编译器知道developers
实现IEnumerable<Developer>
。这意味着任何 IEnumerabler<T>
developers
的扩展将有类型为 Developer
的项目。
关于c# - Linq 如何从 Lambda 推断类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11802960/