/ / Konwertuj pętlę na LINQ - c #, linq, list

Konwertuj pętlę na LINQ - c #, linq, list

Lista obiektów Equity Analytics (akcji) wykonujących obliczenia dla dziennych zwrotów. Myślał, że musi to być rozwiązanie parami:

for(int i = 0; i < sdata.Count; i++){
sdata[i].DailyReturn = (i > 0) ? (sdata[i-1].AdjClose/sdata[i].AdjClose) - 1
: 0.0;
}

Odpowiedzi:

0 dla odpowiedzi № 1

Jestem nowy w LINQ, zacząłem go używać z powodustackoverflow, więc próbowałem zagrać z twoim pytaniem i wiem, że może to przyciągnąć downvotes, ale próbowałem i robi to, czego chcesz, w przypadku gdy jest co najmniej jeden element na liście.

sdata[0].DailyReturn = 0.0;
sdata.GetRange(1, sdata.Count - 1).ForEach(c => c.DailyReturn = (sdata[sdata.IndexOf(c)-1].AdjClose / c.AdjClose) - 1);

Ale muszę powiedzieć, że unikanie pętli nie jest najlepszą praktyką, z mojego punktu widzenia LINQ powinno być używane tam, gdzie jest wygodne i nie wszędzie. Dobre stare pętle są czasami łatwiejsze do utrzymania.


2 dla odpowiedzi nr 2

LINQ oznacza: "Zintegrowany język Pytanie".

LINQ nie powinno być używane i prawie nie może być użyte do przypisania, LINQ nie zmienia podanego parametru IEnumerable, ale tworzy nowy.

Jak sugeruje w komentarzu poniżej, istnieje sposób stwórz nowy IEnumerable z LINQ będzie wolniej i będzie mniej czytelny.

Chociaż LINQ jest miłe, ważne jest, aby wiedzieć, kiedy go nie używać.

Po prostu korzystaj ze starego dobrego dla pętli.