Stavo guardando il codice sorgente di Batch
metodo e ho visto questo:Qual è lo scopo dell'uso di Select (x => x) in un metodo Batch?
// Select is necessary so bucket contents are streamed too
yield return resultSelector(bucket.Select(x => x));
V'è un commento che non ho ben capito. Ho provato questo metodo senza usare Select
e ha funzionato bene. Ma sembra che ci sia qualcosa che mi manca. Non riesco a pensare ad alcun esempio in cui ciò sarebbe necessario, quindi qual è lo scopo reale dell'uso di Select(x => x)
qui?
Ecco il codice sorgente completo per riferimento:
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));
}
Esecuzione ritardata. L'iteratore non è accessibile finché non viene enumerato. –
Questo era * probabilmente * il mio codice per iniziare. Hmm.Solitamente lo farei per evitare che un selettore di risultati trasmetta il codice sorgente a un array e poi lo scherzi, ma in questo caso non sarebbe dannoso. –
@BradChristie Sarà ritardato anche senza 'Select' qui (qualunque cosa intendi). – BartoszKP