gpt4 book ai didi

c# - 在 C# 中使用扩展方法与 lambda 表达式

转载 作者:太空宇宙 更新时间:2023-11-03 22:09:13 27 4
gpt4 key购买 nike

假设我有一个扩展方法

    public static IEnumerable<Product> Filter(
this IEnumerable<Product> productEnum,
Func<Product, bool> selectorParam)
{
return productEnum.Where(selectorParam);
}

我这样称呼

    Func<Product, bool> languageFilter = prod => prod.Language == lang;

如果我没记错的话在功​​能上是一样的

var products = Products.Where(q => q.Language == parameter);

我试图了解何时可以根据第一个示例使用扩展方法,以及何时使用 linq 语法。

最佳答案

我认为您混淆了一些术语。 Filter您显示的方法是一个扩展方法(由参数列表中的 this 关键字表示。您所说的“linq 语法”实际上是一个 lambda 表达式。

所有的 LINQ 方法都作为扩展方法实现并支持两种“风格”的调用:

  1. 实际上直接调用扩展方法,就好像它们是被扩展类型的一部分一样。这就是您将其称为 productEnum.Where(selectorParam) 时显示的内容.

  2. 使用更像 SQL 的语法,称为 LINQ 查询语法。请记住,这种类似于 SQL 的语法由编译器翻译为实际调用扩展方法。

当您定义 Func<Product, bool> languageFilter = prod => prod.Language == lang; 时,您实际上是在定义一个 lambda 表达式并将其分配给类型为 languageFilter 的变量 ( Func<Product, bool>) . Products.Where(q => q.Language == parameter);语句完全相同,只是不是在变量中捕获 lambda 表达式,而是将其简单地传递给扩展方法。

对于您的示例,要使用 LINQ 查询语法获得相同的结果,您可以编写类似于

from p in Products
where p.Language == parameter

(假设参数在别处定义)

关于c# - 在 C# 中使用扩展方法与 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7279316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com