3 Stimmen

Linq späte Bindung Verwirrung

Kann mir bitte jemand erklären, was ich hier übersehe? Basierend auf meinem grundlegenden Verständnis wird Linq Ergebnis berechnet werden, wenn das Ergebnis verwendet wird, und ich kann sehen, dass in folgenden Code.

 static void Main(string[] args)
 {
     Action<IEnumerable<int>> print = (x) =>
     {
         foreach (int i in x)
         {
             Console.WriteLine(i);
         }
     };

     int[] arr = { 1, 2, 3, 4, 5 };
     int cutoff = 1;
     IEnumerable<int> result = arr.Where(x => x < cutoff);
     Console.WriteLine("First Print");
     cutoff = 3;
     print(result);
     Console.WriteLine("Second Print");
     cutoff = 4;
     print(result);
     Console.Read();
}

Ausgabe:

First Print
1
2
Second Print
1
2
3

Jetzt habe ich die

arr.Where(x => x < cutoff); 

zu

IEnumerable<int> result = arr.Take(cutoff); 

und die Ausgabe ist wie folgt.

First Print
1
Second Print
1

Warum wird bei Take nicht der aktuelle Wert der Variablen verwendet?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X