| 

.NET C# Java Javascript Exception

4
Gibt es einen eleganten Weg eine Liste mit typisierten Objekten in ein IEnumerbale<object> zu packen? Eine direkte Zuweisung ist hier nicht Möglich:
List<string> test;
test = new List<string>();
IEnumerable<object> ol;
ol = (IEnumerable<object>)test;
09.05.2011
mindengine 83 1 5
3 Antworten
2
List<string> myList = new List<string>();
List<object> myObjectList = myList.ConvertAll<object>(c=>(object)c);

// (myObjectList is IEnumerable<object>) == true !!!

// Daraus ergibt sich:

IEnumerable<object> ol = (IEnumerable<object>)myList.ConvertAll<object>(c=>(object)c);

// oder (kürzer):

IEnumerable<object> ol = myList.ConvertAll<object>(c=>(object)c);

// oder (noch kürzer):

IEnumerable<object> ol = myList.ConvertAll(c=>(object)c);
09.05.2011
Floyd 14,6k 3 9
Floyd 14,6k 3 9
Natürlich! ConvertAll & Lambda Expressions :)
Vielen Dank!
mindengine 09.05.2011
Gern geschehen! Wobei mich auch interessieren würde wo genau das Problem bei Martin Fuchs Lösung ist.
Floyd 09.05.2011
Siehe Kommentar 5 und 6 bei seinem Beitrag.
mindengine 09.05.2011
4
List<string> myList = new List<string>();
IEnumerable<object> ol = myList.Cast<object>().ToList();
09.05.2011
Martin Fuchs 1,4k 9
Ist nicht Möglich, die Lösung von StackOverflow ist mir bekannt, klappt aber leider aus mir unbekannten Gründen nicht.
mindengine 09.05.2011
Vor dem Schreiben der Antwort hatte ich den Code erfolgreich getestet!!!
Martin Fuchs 09.05.2011
@Martin: kann ich bestätigen. Bei mir läuft das auch.
@mindengine: wie genau äußert sich "klappt bei mir nicht" denn? Compiler-Fehler? Exception? Nicht die gewünschten Elemente in der Liste? Nur zur Sicherheit: Martins Lösung macht eine shallow copy der Liste, d.h. Änderungen an myList *nach* dem Cast-Aufruf haben keine Auswirkungen auf ol.
Matthias Hlawatsch 09.05.2011
Ich habe schlichtweg einfach die Funktion Cast nicht?!
mindengine 09.05.2011
1
Ok, dann fehlt Dir "using System.Linq;" in Deiner Klasse - Cast<T> ist eine Erweiterungsmethode von IEnumerable (wie viele andere Linq-Helferlein definiert in System.Linq.Enumerable), während ConvertAll<TOut> eine "echte" Methode von List<T> ist.
Matthias Hlawatsch 09.05.2011
1
Das war der springende Punkt. Generell sollte man hier erwähnen das im .NET3.5 der Assemblyverweis für using System.Linq; -> System.Core ist!
mindengine 09.05.2011
1
Das müsste etwas mit Covariance und Contravariance in Generics zu tun haben. .Net 4.0
09.05.2011
KCT 937 1 8
KCT 937 1 8
1
ich befinde mich hier in .net 3.5 (Hatte ich vergessen zu erwähnen)
mindengine 09.05.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH