Hallo
Ich habe z.B. eine Klasse MyClass mit 2 Properties:
class MyClass
{
public string Name {get; private set;}
public List<T> Entries {get; private set;} //(T soll eine beliebige Klasse sein)
}
Nun will ich über Reflektion diese Klasse analysieren, d.h. ich will wissen ob ein Property eine "Auflistung" ist oder nicht. Doch leider habe ich noch keinen Weg gefunden, um dies eindeutig festzustellen...
Viele Grüße
Quaneu
ich will wissen ob ein Property eine "Auflistung" ist oder nicht.
Das ist etwas schwammig formuliert. Welchen Typ willst du genau prüfen? IEnumerable, IList, List, ...? Mit konkreten generischen Parametern oder ohne?
Ansonsten: Guck dir mal System.Type auf "Vererbung" von IEnumerable<> prüfen an.
Eigentlich nur, ob ein Property eine Auflistung ist, d.h. ob es IEnumerable implementiet, dazu habe ich schon die Methode IsAssignableFrom(...) benutzt, doch wenn ich hier IEnumerable verwenden will, will er immer noch ein Parametern...
Daher IEnumerable und ohne konkreten generischen Parametern.
Viele Grüße
Quaneu
Hallo Quaneu,
IEnumerable<T> "erbt" vom untypisierten IEnumerable. Darauf kannst du testen, ohne einen Typparameter angegeben zu müssen. Allerdings musst du dann auch System.Collections einbinden (mit using, ist aber eher nicht zu empfehlen) oder den Interface-Namen vollqualifiziert (System.Collections.IEnumerable) angeben.
Ansonsten geht es doch im dem verlinkten Thread genau um das Thema.
herbivore
Kleiner Nachtrag...
IEnumerable eignet sich nicht, um eine "Liste" zu identifizieren... denn ich habe gerade gesehen, dass string auch dieses Interface implementiert...
Einen String kannst du in gewisser Weise als 'Liste' von Zeichen Interpretieren
Es funktioniert ja auch:
foreach(char c in str){...}
Was ist für dich eine Liste?
Das muss ich wohl verdrängt haben... ist ist auch vollkommen klar...
Gute Frage... jede Art von Aufzählung, jedoch nicht so Dinge wie string... (weiß leider grad nicht wie ich das besser beschreiben könnte...)
Grüße
Quaneu
Hallo Quaneu,
weiß leider grad nicht wie ich das besser beschreiben könnte.
mit ICollection<T>.
Nachtrag:
Zitat von: ICollection(T) Interface (System.Collections.Generic)
The ICollection<T> interface is the base interface for classes in the System.Collections.Generic namespace.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"