Laden...

Prüfen auf generische Liste

Erstellt von Unikum vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.159 Views
U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 16 Jahren
Prüfen auf generische Liste

Guten Abend,

ich habe eine Klasse mit zwei Eigenschaften: DataMember und DataSource. Ich kann ermitteln, ob ein DataSet mit DataTable, eine DataView oder eine BindingSource übergeben wurde, oder auch eine normale Liste (IList, Array, etc).

Nur weiß ich nicht, ob und wie ich überprüfen, kann ob eine IList<T> oder ICollection<T> übergeben wurde, und wie ich den Typen des Platzhalters ermitteln kann. Mir geht es letztendlich darum, den Typen des Platzhalters zu ermitteln und mit dessen Eigenschaften weiter zu arbeiten.

Ich habe schon recherschiert, aber nichts gefunden (vielleicht habe ich die falschen Suchbegriffe verwendet; wie prüfen generic IList Typ, etc).

Gruß Olli

630 Beiträge seit 2007
vor 16 Jahren

Hallo Unikum,

ich denke du suchst das is Schlüsselwort.

Gruss
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Unikum,

warum willst du das überhaupt ermitteln?

Ich denke, es geht nur per Reflection.

herbivore

5.941 Beiträge seit 2005
vor 16 Jahren

Hallo zusammen

warum willst du das überhaupt ermitteln?

Ich denke, es geht nur per Reflection.

Jup, AFAIK.


if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IList<>))
    Console.WriteLine("Is generic type of IList");

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 16 Jahren

Guten Morgen,

@Peter Bucher: Ich habe das gestern abend gar nicht so gesehen, dass es von GetType() eine Eigenschaft namens IsGenericType() gibt 🙂 Erst heute morgen.

@herbivore: Wegen Darstellung der Werte und der automatischen Generierung von Spalten in einem Control, muss ich ja die öffentlichen Properties ermitteln. Nun war der Wunsch, dass wenn eine IList<> gebunden wird, die Liste aber leer ist, wenigstens die Spaltenköpfe angezeigt werden (nur bei IList<>, nicht bei IList).

Ein Kumpel hab mir auch die Idee, wenn eine IList<> gebunden wird, einfach den Type der this[index]-Eigenschaft zu ermitteln..

Gruß

O
778 Beiträge seit 2007
vor 16 Jahren

Wenn du aber nur prüfst mit IsGeneric Type, dann kriegst bei Sachren wie FooCollection:IList<Foo> Probleme. Der einzige Ausweg aus dem ganzen Debakel lautet Durchiterieren durch die Interfacemap und die Interfaces dann pruefen, ob die ICollection oder IList von irgendwas sind. Dann kannst du mit type.GetGenericParameters den Typ der Auflistung bestimmen...