c# - Linq 如何从 Lambda 推断类型

标签 c# linq delegates lambda extension-methods

这是原始的 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 委托(delegate)。所以在

     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/

相关文章:

c# - 从另一个场景访问 CustomEditor Inspector 值

c# - C# 中的 LINQ 查询?

c# - Linq:Xml 到 IEnumerable<KeyValuePair<int, string>> 延迟执行?

C# LINQ 按如下所示格式的对象列表进行分组

c# - 动态构建 Func<t,t> 列表 - 然后应用于 linq 查询

c# - wpf如何根据类型设置数据模板

c# - WSE + 自签名证书

c# - 基本 Controller 中的 Asp.Net MVC Outputcache 不工作

objective-c - 使用 Swift 数组 - 如何实现符合协议(protocol)的对象数组

iphone - 如何关闭多个存在的 Modal ViewController 并返回到根 Tab Bar Controller ?