有人可以帮我解释一下这行吗?
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;
答案 0 :(得分:3)
两者完全相同,并且会编译成完全相同的东西。第二个将由编译器简单地转换为第一个。
答案 1 :(得分:3)
由于Linq方法只是扩展方法(google那些,如果你还没有读过它),这个:
IEnumerable<string> filteredNames = System.Linq.Enumerable.Where(names, n => n.Length >= 4);
与此相同:
IEnumerable<string> filteredNames = names
.Where(name => name.Length >= 4);
现在更有意义了吗?
如果它仍然没有意义,谷歌&#34; c#lambdas&#34;和#34; c#delegates&#34;。
答案 2 :(得分:2)
第一行是直接调用IEnumerable.Where
Extension方法,而不是通过names
实例。更常见的(在很多在线示例中)看起来像这样:
IEnumerable<string> filteredNames = names.Where(n => n.Length >= 4);
在这种形式下它也更清晰 - 阅读我们的代码行
过滤的名称等于长度大于(或等于)4
的名称
答案 3 :(得分:1)
通常会将其写为扩展方法:
IEnumerable<string> filteredNames = names.Where(n => n.Length >= 4);
我认为这种形式的含义更清晰。它等同于您的查询语法:它为您提供了一个枚举,列出了4个或更多字符的名称。
答案 4 :(得分:0)
为了帮助您了解它们是如何相同的,请尝试更改一些代码:
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);