Conversione da IEnumerable a List

Voglio convertire da IEnumerable a List . Come posso fare questo?

Puoi farlo semplicemente usando LINQ.

Assicurati che questo utilizzo sia nella parte superiore del tuo file C #:

 using System.Linq; 

Quindi utilizzare il metodo di estensione ToList .

Esempio:

 IEnumerable enumerable = Enumerable.Range(1, 300); List asList = enumerable.ToList(); 

Nel caso in cui si lavori con un vecchio file System.Collections.IEnumerable anziché IEnumerable è ansible utilizzare enumerable.Cast().ToList()

Se stai usando un’implementazione di System.Collections.IEnumerable puoi fare quanto segue per convertirlo in una List . Il seguente utilizza il metodo Enumerable.Cast per convertire IEnumberable in un List generico.

 //ArrayList Implements IEnumerable interface ArrayList _provinces = new System.Collections.ArrayList(); _provinces.Add("Western"); _provinces.Add("Eastern"); List provinces = _provinces.Cast().ToList(); 

Se stai utilizzando la versione generica IEnumerable , la conversione è semplice. Poiché entrambi sono generici, puoi fare come di seguito,

 IEnumerable values = Enumerable.Range(1, 10); List valueList = values.ToList(); 

Ma se IEnumerable è nullo, quando provi a convertirlo in un List , otterrai ArgumentNullException dice che il valore non può essere nullo.

 IEnumerable values2 = null; List valueList2 = values2.ToList(); 

inserisci la descrizione dell'immagine qui

Pertanto, come menzionato nell’altra risposta , ricorda di fare un controllo null prima di convertirlo in una List .

Io uso un metodo di estensione per questo. Il mio metodo di estensione prima controlla se l’enumerazione è nullo e in tal caso crea una lista vuota. Questo ti permette di fare un foreach su di esso senza dover esplicitamente verificare null.

Ecco un esempio molto forzato:

 IEnumerable stringEnumerable = null; StringBuilder csv = new StringBuilder(); stringEnumerable.ToNonNullList().ForEach(str=> csv.Append(str).Append(",")); 

Ecco il metodo di estensione:

 public static List ToNonNullList(this IEnumerable obj) { return obj == null ? new List() : obj.ToList(); } 

un altro modo

 List list=new List(); IEnumerable enumerable =Enumerable.Range(1, 300); foreach (var item in enumerable ) { list.add(item); }