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?