Ich war auf den Quellcode von Batch
Methode suchen, und ich habe gesehen:Was ist der Zweck der Verwendung von Select (x => x) in einer Batch-Methode?
// Select is necessary so bucket contents are streamed too
yield return resultSelector(bucket.Select(x => x));
Es gibt einen Kommentar, ich verstehe nicht ganz. Ich habe diese Methode ohne Select
getestet und es hat gut funktioniert. Aber es scheint, dass es etwas gibt, das ich vermisse. Ich kann mir kein Beispiel vorstellen, wo das nötig wäre. Also, was ist der eigentliche Zweck der Verwendung von Select(x => x)
hier?
Hier ist der vollständige Quellcode Referenz:
private static IEnumerable<TResult> BatchImpl<TSource, TResult>(
this IEnumerable<TSource> source,
int size,
Func<IEnumerable<TSource>, TResult> resultSelector)
{
TSource[] bucket = null;
var count = 0;
foreach (var item in source)
{
if (bucket == null)
bucket = new TSource[size];
bucket[count++] = item;
// The bucket is fully buffered before it's yielded
if (count != size)
continue;
// Select is necessary so bucket contents are streamed too
yield return resultSelector(bucket.Select(x => x));
bucket = null;
count = 0;
}
// Return the last bucket with all remaining elements
if (bucket != null && count > 0)
yield return resultSelector(bucket.Take(count));
}
Verzögerte Ausführung. Auf den Iterator wird erst zugegriffen, wenn er überzählig ist. –
Das war wahrscheinlich mein Code, mit dem ich anfangen sollte. Hmm.Normalerweise würde ich dies tun, um zu verhindern, dass ein Result Selector die Quelle in ein Array umwandelt und dann damit herumhantiert, aber in diesem Fall wäre das eigentlich nicht schädlich. –
@BradChristie Es wird auch ohne das 'Select' hier verzögert (was auch immer du meinst). – BartoszKP