Wie cast Generische Listen dynamisch in C#?
Ich versuche zu casten List<object>
zu List<string>
dynamisch. Ich habe versucht, mehrere Möglichkeiten, aber ich kann nicht finden eine Lösung. Dies ist ein kleines Beispiel, das zeigt das problem:
List<object> listObject = new List<object>();
listObject.Add("ITEM 1");
listObject.Add("ITEM 2");
listObject.Add("ITEM 3");
List<string> listString = ¿¿listObject??;
Vielen Dank im Voraus!
- Dies wird nicht möglich sein, in der version 4, da ist es nicht typesafe entweder "Verallgemeinerung" oder "niedergeschlagen" eine
List<T>
- es ist invariant, nicht kovariante oder kontravariant. Übrigens, ich bin müde diese Fehlinformation veröffentlicht alle Fragen zur Kollektion, ko/Kontravarianz.
InformationsquelleAutor | 2009-08-21
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie können LINQ dann die
Cast
Methode wird tun, was Sie brauchen:Können Sie auch die
ConvertAll
Methode, wie Stan weist in seiner Antwort:Wenn du nicht mit C#3 dann müssen Sie den "alten" delegieren syntax eher als eine lambda:
Wenn Sie .NET 3.5, die Sie verwenden können, auf diese Weise Sie don ' T haben einen extra ToList(). Sie können auch Ihren eigenen Konverter mit, wenn Sie brauchen, um zu konvertieren erweiterte Objekte.
Wenn Sie nicht verwenden können, LINQ, können Sie dies tun
Cast
Methode nur liefert ein iterator-Objekt, das tut nichts, bis Sie tatsächlich beginnen die Aufzählung der Sequenz (mitToList
,foreach
etc), an welcher Stelle es casts und streams ein element zu einem Zeitpunkt. Die Reihenfolge ist nur einmal aufgezählt.Cast
dannToList
" - Ansatz und dieConvertAll
Ansatz nur aufzuzählen, die Reihenfolge einmal, würde ich erwarten, dassConvertAll
werden geringfügig schneller, da es durchläuft die QuelleList
's zugrunde liegenden array direkt, anstatt ein iterator-Objekt. (Obwohl ich bezweifle, ob dieser Unterschied sollte spürbar sein, in den meisten realen Szenarien.)Wie bout this:
Verwendung:
Ich glaube nicht, können Sie es tun einen Schritt. Versuchen Sie stattdessen, so etwas wie dieses:
Enumerable.Cast<T>()
.Mein Erster post... Hoffe, nützlich sieht die Arbeit in meinem Projekt...
Ich denke, dass werde ich hinzufügen, auch ein try catch irgendwo.
wie test