Laden...

Per Reflektion testen, ob ein Property eine "Liste" ist.

Erstellt von Quaneu vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.091 Views
Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 12 Jahren
Per Reflektion testen, ob ein Property eine "Liste" ist.

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

2.891 Beiträge seit 2004
vor 12 Jahren

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.

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 12 Jahren

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

49.485 Beiträge seit 2005
vor 12 Jahren

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

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 12 Jahren

Vielen vielen Dank für eure Hilfe.

Grüße
Quaneu

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 12 Jahren

Kleiner Nachtrag...

IEnumerable eignet sich nicht, um eine "Liste" zu identifizieren... denn ich habe gerade gesehen, dass string auch dieses Interface implementiert...

1.346 Beiträge seit 2008
vor 12 Jahren

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?

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 12 Jahren

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

6.911 Beiträge seit 2009
vor 12 Jahren

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!"