venerdì 29 luglio 2011

Estensioni interattivi per LINQ to Objects

Pubblicato da Jonathan Allen

Estensioni interattiva (Ix) è un insieme di ulteriori LINQ to Objects operatori di query basate sul lavoro svolto nelle estensioni reattiva (Rx). Un rapido sguardo attraverso l'API rivela una serie di metodi di estensione IEnumerable sotto lo spazio dei nomi System.Linq. Mentre la maggior parte gli sviluppatori hanno già molti di questi nelle loro librerie di utilità propria, avere una implementazione standard per queste caratteristiche mancanti sarebbe utile.

  • Il primo è ForEach, il metodo di estensione che praticamente ogni sviluppatore ha scritto ad un certo punto. Ci sono due varianti, con la seconda tra cui un indice a base zero.
  • Buffer tritare una enumerazione enumerazioni in piccoli sulla base di una certa dimensione. Il metodo di buffer utilizza una miscela di eager loading e pigro. Ogni buffer di N elementi è letto avidamente, ma senza elementi più dalla fonte verrà letto fino a quando il buffer precedente è completamente consumato.
  • Cattura è una funzione piuttosto interessante. Si leggerà da una fonte fino al completamento uno o viene generata un'eccezione. In quest'ultimo caso sarà poi iniziare a leggere da una seconda fonte. La seconda fonte può essere un oggetto IEnumerable o una funzione che restituisce un oggetto IEnumerable. Quando si utilizza il secondo la logica può essere limitato a un tipo specifico di eccezione.
  • Concat inizia semplicemente enumerando una seconda lista una volta che il completamento del primo.
  • Differire prende una funzione invece di un oggetto IEnumerable. La funzione sarà eseguita se e solo se qualcosa cerca di enumerare su di esso.
  • Filtra DistinctUntilChanged i duplicati consecutivi. Per esempio, la sequenza [AABAAB] sarebbe diventato [ABAB].
  • Non è una variante di ForEach. A differenza ForEach, la funzione Do esegue solo la sua azione su elementi quando vengono enumerati.
  • DoWhile è come TakeWhile differenza che la funzione predicato non considera la voce di essere enumerato.
  • Per le occasioni funzione con un problema interessante. Diciamo che avete un elenco di autori e una funzione di ricerca di corrispondenza che restituisce un elenco di libri. La funzione dovrebbe Per eseguire la funzione di ricerca su ogni autore nella lista e poi restituire una lista concatenata di libri.
  • Generare restituisce una lista mia imitazione di uno stile di C-loop. Ci vuole per i parametri, il valore iniziale, la funzione di condizione, la funzione di ribadire che modifica lo stato, e il selettore risultato. Si potrebbe vedere facilmente questo essere usati per rappresentare una macchina a stati come IEnumerable.
  • Se la funzione utilizza una funzione predicato per determinare quale delle due liste per tornare. Se solo una lista è fornita, poi una sequenza vuota viene restituita per il caso falso.
  • Memoize è utilizzato per prevenire enumerando una fonte più di una volta. In un certo senso è come ToList chiamando, solo che ToList sempre enumerare la fonte una sola volta, mentre si Memoize enumerare la fonte zero o una volta. Se dite Memoize quanti lettori aspettarsi, può rimuovere elementi dalla sua buffer interno agli elementi che vengono consumati da tutti i lettori previsto.
  • Min e Max lavorare come pubblicizzato. MinBy e MaxBy aggiungere l'opzione di fornire una funzione di valore in modo da poter esprimere cose come "selezionare il cliente con la maggior parte delle vendite".
  • OnErrorResumeNext concatena due o più sequenze con l'ulteriore vantaggio che un errore da ogni sequenza non le impedirà di concatenare le sequenze rimanenti.
  • Ripetere crea un elenco, finito o infinito, che si limita a ripetere lo stesso valore più e più volte. Il valore può essere uno scalare o una lista.
  • Riprova cercherà di enumerare una fonte fino al successo o un numero opzionale di eccezioni sono state gettate.
  • Ritorno diventa un valore scalare in una lista contenente solo che un valore, eliminando la necessità di creare esplicitamente gli array di lunghezza 1.
  • La scansione è una funzione utile per aggregare più campi. A differenza dei normali funzioni di aggregazione, le funzioni di scansione può essere composto, questa riduzione del numero di passaggi attraverso la fonte. Per esempio, source.Scan (a => Dollari + = a.Dollars). Scan (a => Unità + = a.Units).
  • SkipLast e TakeLast sono specchi della Prendete e Skip funzioni.
  • Proiezione è utile per testare, crea un oggetto IEnumerable che genera un'eccezione se qualcuno cerca di enumerare su di esso.

Per ulteriori informazioni sulle estensioni interattive guardare presentazione Bart De Smet o scaricare la versione sperimentale .


Corso Visual Studio - Corsi Visual Studio
Corso .Net- Corso Dot.Net - Corso Vb.net
Corso C# - Corso PHP - Corso Joomla

Nessun commento:

Posta un commento