可枚举.Where使用集合作为参数,而不是扩展方法



有人能帮我解释一下这一行吗?

IEnumerable<string> filteredNames = Enumerable.Where(names, n => n.Length >= 4);

我理解:

string[] names = { "Billy", "Bob", "Steve" }
var linq = from name in names
where (name.Length >= 4)
select name;

两者在字面上是完全相同的,并且将编译为完全相同的东西。第二个将被编译器简单地转换为第一个。

由于Linq方法只是扩展方法(如果你还没有读过的话,可以用谷歌搜索),所以:

IEnumerable<string> filteredNames = System.Linq.Enumerable.Where(names, n => n.Length >= 4);

与此相同:

IEnumerable<string> filteredNames = names
                                      .Where(name => name.Length >= 4);

现在更有意义了吗?

如果它仍然没有意义,谷歌"c#lambdas"one_answers"c#delegates"。

第一行是直接调用IEnumerable.Where Extension方法,而不是通过names实例。更常见的是(在许多在线示例中),它看起来是这样的:

IEnumerable<string> filteredNames = names.Where(n => n.Length >= 4);

在这种形式下,它也更清晰——阅读代码行,我们有

筛选的名称等于长度大于(或等于)4 的名称

这通常被写成一个扩展方法:

IEnumerable<string> filteredNames = names.Where(n => n.Length >= 4);

我认为它的含义在这种形式中更清晰。它相当于你的查询语法:它为你提供了一个枚举表,列出了4个或更多个字符的名称。

要帮助您了解它们是如何相同的,请尝试更改一些代码:

string[] names = { "Billy", "Bob", "Steve" };
var filteredNames1 = from n in names
    where (n.Length >= 4)
    select n;
IEnumerable<string> filteredNames2 = System.Linq.Enumerable.Where(names, n => n.Length >= 4);

Enumerable.Where(….),Enumerable.Any(,在括号中,可以使用集合名称,然后使用linq语句)。。或者在下面的语句中,不需要在括号内包含集合名称。。IEnumerable filteredNames=名称。其中(n=>n。长度>=4);

最新更新