linq 可枚举,其中以集合作为参数,而不是扩展方法

pgvzfuti  于 2022-12-06  发布在  其他
关注(0)|答案(6)|浏览(111)

有人能给我解释一下这句台词吗?

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;
3b6akqbq

3b6akqbq1#

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

bz4sfanl

bz4sfanl2#

由于Linq方法只是扩展方法(如果你还没有读过相关内容,请搜索一下),因此:

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

也是这样:

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

现在说得通了吗?
如果仍然没有意义,请搜索“c# lambdas”和“c# delegates”。

vmdwslir

vmdwslir3#

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

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

在这种形式下,它也更清晰--阅读我们所拥有的代码行
筛选的名称等于长度大于(或等于)4的名称

vshtjzan

vshtjzan4#

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

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

我认为它的含义在这种形式下更清楚,它相当于您的查询语法:它会提供一个枚举对象,列出4个或更多字符的名称。

yqkkidmi

yqkkidmi5#

为了帮助您理解它们的相同之处,请尝试更改一些代码:

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);
6bc51xsx

6bc51xsx6#

Enumerable.Where(....),Enumerable.Any(....),Enumerable.Aggregate(....),Enumerable有很多方法,在括号中,你可以使用集合名,然后使用linq语句)..或者在下面的语句中,你不需要在括号中包含集合名.. IEnumerable filteredNames = names.Where(n =〉n.Length〉= 4);

相关问题