c# - IEnumerable 选择

标签 c# linq

有人可以解释为什么下面的 C# 行与下面的 foeach block 的行为不同吗?

string [] strs = {"asdf", "asd2", "asdf2"};
strs.Select(str => doSomething(str));


foreach(string str in strs){
  doSomething(str);
}

我在 doSomething() 中放置了一个断点,它不会在 Select 中触发,但会在 foreach 中触发。

TIA

最佳答案

这是因为 LINQ 查询被延迟了。传递给 Select 方法的 lambda 在您访问结果时实际执行。

尝试:

string [] strs = {"asdf", "asd2", "asdf2"};
var result = strs.Select(str => doSomething(str));

foreach(var item in result) {
}

关于c# - IEnumerable 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7986144/

相关文章:

c# - 使用数据库中的复选框填充 StackPanel

c# - 分层数据的高级LINQ分组和投影查询(EF 4.0 + LINQ + ASP.NET MVC + HighCharts)

c# - 如何从带有 MethodCallExpression/lambda 的树中的 ConditionalExpression.IfThen 返回?

vb.net - LINQ 选择新建

c# - 使用内存中查询实现自定义 QueryProvider

c# - 设置由字符串给出的枚举类型的属性

C# XML 数组反序列化

c# - 多个类映射到 Entity Framework 4.1 Fluent API 中的同一个表

c# - Parallel.Foreach + yield 返回?

c# - 保存在以希腊字母 C# 表示的 mysql 行中