Proszę wyjaśnić, dlaczego dane wyjściowe tych dwóch funkcji są różne dla tych samych danych?
Spodziewałem się, że wytworzą takie same wyniki, tj. Dołączają linie. Jak mogę zmienić opcję 1, aby dodać linie?Wyrażenie Linq i foreach dają różne wyniki.
(Tło Measurements
realizuje ICollection<>
)
Alternatywne 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)));
}
-> no/wyjście Dodane linie
Alternatywa 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));
}
}
-> Dodane linie na każdym pomiarze
Lazy Ewaluacja to termin. [Artykuł o 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