这两个语句之间是否有区别。我做了一个测试,但在延迟执行的测试中,它失败了。有什么区别?
items.Where(w => w.Length >= length).Select(w => w.Substring(0, length)).Distinct();
Run Code Online (Sandbox Code Playgroud)
和
(from a in items
where a.Length >= 3
select a.Substring(0, length)).Distinct();
Run Code Online (Sandbox Code Playgroud)
他们对我读得一样,我相信也完全一样吗?
我假设3vs length是一个错字。
过去之后,这里的窍门是:试试吧;这里一个很好的工具是sharplab.io - 这里有两个例子,我们可以看到-编译和反编译之后-这M和N大致相同:
public void M()
{
IEnumerable<string> enumerable = Enumerable.Distinct(Enumerable.Select(Enumerable.Where(items, new Func<string, bool>(<M>b__2_0)), new Func<string, string>(<M>b__2_1)));
}
public void N()
{
IEnumerable<string> enumerable = Enumerable.Distinct(Enumerable.Select(Enumerable.Where(items, new Func<string, bool>(<N>b__3_0)), new Func<string, string>(<N>b__3_1)));
}
Run Code Online (Sandbox Code Playgroud)
它们使用不同的编译器生成的方法,但实现方式相同:
[CompilerGenerated]
private bool <M>b__2_0(string w)
{
return w.Length >= length;
}
[CompilerGenerated]
private string <M>b__2_1(string w)
{
return w.Substring(0, length);
}
[CompilerGenerated]
private bool <N>b__3_0(string a)
{
return a.Length >= length;
}
[CompilerGenerated]
private string <N>b__3_1(string a)
{
return a.Substring(0, length);
}
Run Code Online (Sandbox Code Playgroud)
所以:我们可以得出结论,它们是相同的。
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |