有人可以解释为什么下面的C#行与下面的foeach块的行为不一样吗?
string [] strs = {"asdf", "asd2", "asdf2"};
strs.Select(str => doSomething(str));
foreach(string str in strs){
doSomething(str);
}
Run Code Online (Sandbox Code Playgroud)
我在doSomething()中放置了一个断点,它不会在Select中触发,但它与foreach一起触发.
TIA
Jak*_*cki 10
这是因为LINQ查询是延迟的.传递给Select
方法的lambda 实际上是在访问结果时执行的.
尝试:
string [] strs = {"asdf", "asd2", "asdf2"};
var result = strs.Select(str => doSomething(str));
foreach(var item in result) {
}
Run Code Online (Sandbox Code Playgroud)
在将查询转换为using 、等Linq
之前,不会处理该查询。Enumarable
ToList()
ToArray()
顺便说一下,与你的foreach
陈述等效的是这样的:
strs.ForEach(doSomething);
strs.ToList().ForEach(doSomething);
Run Code Online (Sandbox Code Playgroud)
或者
Array.ForEach(strs, doSomething);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13064 次 |
最近记录: |