Ich möchte konvertieren von IEnumerable<Contact>
à List<Contact>
. Wie kann ich das tun?
Antworten
Zu viele Anzeigen?Sie können dies sehr einfach mit LINQ tun.
Stellen Sie sicher, dass diese Verwendung am Anfang Ihrer C#-Datei steht:
using System.Linq;
Verwenden Sie dann die ToList
Erweiterungsmethode.
Beispiel:
IEnumerable<int> enumerable = Enumerable.Range(1, 300);
List<int> asList = enumerable.ToList();
Wenn Sie eine Implementierung von System.Collections.IEnumerable
können Sie wie folgt vorgehen, um sie in eine List
. Die folgenden Verwendungen Enumerable.Cast Methode zur Konvertierung IEnumberable
zu einer generischen List
.
//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 verwenden IEnumerable<T>
Die Umstellung ist einfach. Da beide Generika sind, können Sie wie unten tun,
IEnumerable<int> values = Enumerable.Range(1, 10);
List<int> valueList = values.ToList();
Aber wenn die IEnumerable
null ist, wenn Sie versuchen, sie in eine List
erhalten Sie ArgumentNullException
mit der Aussage Wert kann nicht null sein.
IEnumerable<int> values2 = null;
List<int> valueList2 = values2.ToList();
Daher wird, wie in der andere Antwort denken Sie daran, eine null
prüfen, bevor sie in eine List
.
Ich verwende dafür eine Erweiterungsmethode. Meine Erweiterungsmethode prüft zunächst, ob die Aufzählung null ist, und erstellt in diesem Fall eine leere Liste. Dies ermöglicht es Ihnen, eine foreach auf sie zu tun, ohne explizit für null zu überprüfen.
Hier ein sehr erfundenes 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();
}