Fügen Sie Element zur generischen Liste / Sammlung mit Reflektion hinzu

8

Ich möchte ein Element zu einer generischen Liste mit Reflektion hinzufügen. In der Methode "DoSomething" versuche ich die folgende Zeile zu beenden,

%Vor%

aber ich bekomme verschiedene Arten von Fehlern.

Unten ist mein vollständiger Code

%Vor%

Irgendwelche Ideen / Vorschläge?

    
kayak 05.02.2011, 22:57
quelle

4 Antworten

18

Ich denke du willst:

%Vor%

Da Sie nicht wissen, was der Elementtyp der Sammlung sein wird (könnte Auto, Fahrrad, Fahrrad usw. sein), werden Sie es schwer finden, eine nützliche Besetzung zu finden. Wenn Sie beispielsweise sagen, dass die Sammlung definitiv IList<SomeMyBaseClassSubType> implementiert, ist das nicht sehr hilfreich, da IList<T> nicht kovariant ist. Natürlich sollte Casting zu IEnumerable<MyBaseClass> erfolgreich sein , aber das wird dir nicht helfen, da es keine Mutationen unterstützt. Wenn Ihr Sammlertyp andererseits die nicht-generischen IList oder ICollection -Typen implementiert hat, kann es nützlich sein, diese zu transformieren.

Aber wenn Sie sicher sind, dass die Sammlung IList<Car> implementiert (d. h. Sie kennen den Elementtyp der Sammlung vorher), sind die Dinge einfacher:

%Vor%     
Ani 05.02.2011, 23:13
quelle
4

Als Alternative ... einfach nicht; Betrachten Sie die nicht-generische IList-Schnittstelle:

%Vor%

Es ist zwar nicht obligatorisch für alle generischen Collections, IList zu implementieren, aber sie tun es fast alle, da sie so viel Core-Framework-Code untermauern.

    
Marc Gravell 05.02.2011 23:29
quelle
0

start mit typeof<List<>>.GetMethods , Sie rufen keine Methode der Eigenschaft auf, sondern eine Methode vom Typ der Eigenschaft

    
Guillaume86 05.02.2011 23:02
quelle
0

Könnten Sie die Reflexion einfach alle zusammen vermeiden und verwenden:

%Vor%

Sie könnten auch eine Schnittstelle oder abstrakte Methoden in Betracht ziehen ...

    
Rob 05.02.2011 23:19
quelle

Tags und Links