Könnten Sie bitte erklären, warum die Ausgabe dieser beiden Funktionen für die gleichen Daten unterschiedlich ist?
Ich erwartete, dass sie den gleichen Ausgang produzieren, d. H. Append Linien. Wie kann ich die Alternative 1 ändern, um Zeilen hinzuzufügen?Linq Ausdruck und foreach produzieren unterschiedliche Ergebnisse
(Background Measurements
implementiert ICollection<>
)
Alternative 1
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)));
}
-> keine Ausgabe/hinzugefügt Linien
Alternative 2
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));
}
}
-> hinzugefügt Linien für jede Messung
Lazy Evaluation ist der Begriff. [Artikel über Lazy vs Eager] (http://blogs.msdn.com/b/ericwhite/archive/2006/10/04/lazy-evaluation-_2800_and-in-contrast_2c00_-eager-evaluation_2900_.aspx) – bland