请您解释为什么这两个函数的输出对于相同的数据是不同的?
我希望它们产生相同的输出,即附加线。如何更改备选1以添加行?
(后台Measurements
实施ICollection<>
)
private void CreateBody(TestRun testRun, StringBuilder lines)
{
testRun.Measurements.OrderBy(m => m.TimeStamp)
.Select(m => lines.AppendLine(string.Format("{0},{1}", m.TestRound, m.Transponder.Epc)));
}
- &GT;没有输出/添加行
private void CreateBody2(TestRun testRun, StringBuilder lines)
{
foreach (Measurement m in testRun.Measurements.OrderBy(m => m.TimeStamp))
{
lines.AppendLine(string.Format("{0},{1}", m.TestRound, m.Transponder.Epc));
}
}
- &GT;为每次测量添加行
答案 0 :(得分:9)
因为linq延迟执行所以执行select将永远不会发生(因为你正在执行select然后退出方法),而foreach将在你执行方法时执行。您需要枚举您选择的结果。例如,通过执行ToList()或ToArray()来强制方法枚举,或者您可以完全采用不同的方法。
private void CreateBody(TestRun testRun, StringBuilder lines)
{
testRun.Measurements.OrderBy(m => m.TimeStamp).ToList().ForEach(m => lines.AppendLine(string.Format("{0},{1}", m.TestRound, m.Transponder.Epc)));
}