Condividi tramite


Delegati generici per la modifica di matrici ed elenchi

Aggiornamento: novembre 2007

In questo argomento viene fornita una panoramica dei delegati generici per conversioni, predicati di ricerca e azioni da eseguire sugli elementi di una matrice o di un insieme.

Delegati generici per la modifica di matrici ed elenchi

Il delegato generico Action<T> rappresenta un metodo che esegue una determinata azione su un elemento del tipo specificato. È possibile creare un metodo che esegua l'azione desiderata sull'elemento, creare un'istanza del delegato Action<T> per rappresentare il metodo e quindi passare la matrice e il delegato al metodo generico statico Array.ForEach<T>, che viene chiamato per ogni elemento della matrice.

La classe generica List<T> fornisce inoltre un metodo ForEach che utilizza il delegato Action<T>. Questo metodo non è generico.

Nota:

Quanto indicato sopra fornisce uno spunto interessante riguardo ai metodi e ai tipi generici. Il metodo Array.ForEach<T> deve essere statico (Shared in Visual Basic) e generico perché Array non è un tipo generico. L'unico motivo per cui è possibile specificare un tipo su cui possa agire Array.ForEach<T> è che il metodo dispone di un elenco specifico di parametri di tipo. Al contrario, il metodo non generico List<T>.ForEach appartiene alla classe generica List<T> e pertanto utilizza semplicemente il parametro di tipo della rispettiva classe. La classe è fortemente tipizzata, quindi il metodo può essere un metodo di istanza.

Il delegato generico Predicate<T> rappresenta un metodo che determina se un determinato elemento soddisfa i criteri specificati. È possibile utilizzarlo con i seguenti metodi generici statici di Array per eseguire la ricerca di un elemento o di un insieme di elementi: Exists<T>, Find<T>, FindAll<T>, FindIndex, FindLast<T>, FindLastIndex e TrueForAll<T>.

Predicate<T> utilizza inoltre i metodi di istanza non generici corrispondenti della classe generica List<T>.

Il delegato generico Comparison<T> consente di fornire una sequenza di ordinamento per gli elementi di matrice o elenco che non hanno un ordinamento nativo, oppure di eseguire l'override dell'ordinamento nativo. Creare un metodo che esegua il confronto, creare un'istanza del delegato Comparison<T> per rappresentare tale metodo e quindi passare la matrice e il delegato al metodo generico statico Array.Sort<T>(array<T[], Comparison<T>). La classe generica List<T> fornisce un overload del metodo di istanza corrispondente, List<T>.Sort(Comparison<T>).

Il delegato generico Converter<TInput, TOutput> consente di definire una conversione tra due tipi e di convertire una matrice o un elenco di un tipo rispettivamente in una matrice o in un elenco dell'altro. Creare un metodo che converta gli elementi dell'elenco esistente in un nuovo tipo, creare un'istanza del delegato per rappresentare il metodo e utilizzare il metodo statico generico Array.ConvertAll<TInput, TOutput> per generare una matrice del nuovo tipo a partire dalla matrice originale, oppure il metodo di istanza generico List<T>.ConvertAll<TOutput> per generare un elenco del nuovo tipo a partire dall'elenco originale.

Concatenamento di delegati

Molti dei metodi che utilizzano i delegati restituiscono una matrice o un elenco che è possibile passare a un altro metodo. Se ad esempio si desidera selezionare alcuni elementi di una matrice, convertirli in un nuovo tipo e salvarli in una nuova matrice, è possibile passare la matrice restituita dal metodo generico FindAll<T> al metodo generico ConvertAll<TInput, TOutput>. Se il nuovo tipo di elemento è privo di un ordinamento naturale, è possibile passare la matrice restituita dal metodo generico ConvertAll<TInput, TOutput> al metodo generico Sort<T>(array<T[], Comparison<T>).

Vedere anche

Concetti

Cenni preliminari sui generics in .NET Framework

Insiemi generici in .NET Framework

Interfacce generiche

Vantaggi e limitazioni di generics

Riferimenti

System.Collections.Generic

System.Collections.ObjectModel

Altre risorse

Generics in .NET Framework