it-swarm.com.de

Konvertieren von IEnumerable nach List

Ich möchte konvertieren von IEnumerable<Contact> bis List<Contact>. Wie kann ich das machen?

240
kartal

Sie können dies ganz einfach mit LINQ tun.

Vergewissern Sie sich, dass sich diese Option am oberen Rand Ihrer C # -Datei befindet:

using System.Linq;

Verwenden Sie dann die Erweiterungsmethode ToList .

Beispiel:

IEnumerable<int> enumerable = Enumerable.Range(1, 300);
List<int> asList = enumerable.ToList();
397
vcsjones

Wenn Sie mit einem normalen alten System.Collections.IEnumerable Anstelle von IEnumerable<T> Arbeiten, können Sie enumerable.Cast<object>().ToList() verwenden.

160
cordialgerm

Wenn Sie eine Implementierung von System.Collections.IEnumerable Verwenden, können Sie wie folgt vorgehen, um sie in ein List zu konvertieren. Die folgende Methode verwendet Enumerable.Cast , um IEnumberable in ein generisches List zu konvertieren.

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

List<string> provinces = _provinces.Cast<string>().ToList();

Wenn Sie die generische Version IEnumerable<T> Verwenden, ist die Konvertierung unkompliziert. Da beide Generika sind, können Sie wie folgt tun,

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

Wenn das IEnumerable jedoch null ist, erhalten Sie beim Versuch, es in ein List zu konvertieren, den Hinweis ArgumentNullException, dass der Wert nicht null sein darf.

IEnumerable<int> values2 = null;
List<int> valueList2 = values2.ToList();

enter image description here

Denken Sie daher, wie in andere Antwort erwähnt, daran, eine null -Überprüfung durchzuführen, bevor Sie sie in eine List -Überprüfung umwandeln.

19
Nipuna

ein anderer Weg

List<int> list=new List<int>();

IEnumerable<int> enumerable =Enumerable.Range(1, 300);  

foreach (var item in enumerable )  
{     
  list.add(item);  
}
6

Ich benutze dafür eine Erweiterungsmethode. Meine Erweiterungsmethode überprüft zunächst, ob die Aufzählung null ist, und erstellt in diesem Fall eine leere Liste. Auf diese Weise können Sie foreach ausführen, ohne explizit nach null suchen zu müssen.

Hier ist ein sehr ausgeklügeltes Beispiel:

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

Hier ist die Erweiterungsmethode:

public static List<T> ToNonNullList<T>(this IEnumerable<T> obj)
{
    return obj == null ? new List<T>() : obj.ToList();
}
5
Craig B