Entwickler-Ecke

Basistechnologien - Überprüfen, ob object eine Collection ist


norman2306 - Do 25.03.10 15:18
Titel: Überprüfen, ob object eine Collection ist
Servus!

Gibt es eine einfach Möglichkeit zu überprüfen ob ein object eine Collection<T> (oder davon abgeleitet) ist, ohne das ich T definieren muss?

Bsp:

C#-Quelltext
1:
2:
3:
4:
object obj = new KeyedCollection<stringstring>();

if(obj is Collection<T>) //geht natürlich nicht, aber so in der Art wäre super
    ....



-- Moderiert von user profile iconKha: Beiträge zusammengefasst --


Und noch was... Gibt es eigentlich eine Möglichkeit, seine eigenen Themen zu verschieben, wenn man sich vershentlich vertan hat? :)

Moderiert von user profile iconKha: Topic aus ASP.NET und Web verschoben am Do 25.03.2010 um 20:21


Kha - Do 25.03.10 21:26

user profile iconnorman2306 hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es eine einfach Möglichkeit zu überprüfen ob ein object eine Collection<T> (oder davon abgeleitet) ist, ohne das ich T definieren muss?
Ich weiß nicht, was genau du vorhast, aber für die meisten praktischen Anwendungen sollte doch ein is ICollection genügen :) .

user profile iconnorman2306 hat folgendes geschrieben Zum zitierten Posting springen:
Und noch was... Gibt es eigentlich eine Möglichkeit, seine eigenen Themen zu verschieben, wenn man sich vershentlich vertan hat? :)
Nein, aber dafür gibt's ja uns ;) .


norman2306 - Do 25.03.10 21:44

Dank dir! Jaja, der Baum und der Wald...

Ich habe einen eigenen allgemeinen PropertyDescriptor. Wenn es sich um eine Collection handelt, soll er anders reagieren als sonst. Dafür muss ich aber wissen, dass das eine Collection ist.


Kha - Do 25.03.10 22:36

Um deine ursprüngliche Frage nicht unbeantwortet zu lassen: Da wird man leider alle Vorfahren durchprobieren müssen. Auf Rekursion habe ich gerade keine Lust, also lieber Reactive Framework ;) .

C#-Quelltext
1:
2:
var baseTypes = EnumerableEx.Generate(x.GetType(), t => t.BaseType != null, t => t, t => t.BaseType);
baseTypes.Any(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Collection<>))