【发布时间】:2012-08-03 20:38:29
【问题描述】:
这是原始的 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);
【问题讨论】:
-
参考您的最后一个代码块,该查询尚未推断。除非你调用像 ToList()、ToArray() 这样的贪婪方法,否则默认情况下它仍然是延迟的。
-
@LeoLuis:他的意思是类型推断而不是获取数据。这些概念不相关。
标签: c# linq delegates lambda extension-methods