Refelction Typ (T) eine IEnumerable<T> herausfinden!?
-
Hallo Leute,
ich habe eine PropertyInfo welches als PropertyTyp irgend einne IEnumerable<T> sein kann. Wie kann ich herrausfinden welches Type das IEnumerable hast, bzw. ob es überhaupt ein IEnumerable ist!?
wenn ich sage
propertyInfo.PropertyType == typeof(IEnumerable<>)
kommt false raus!?
und wie komm ich an den Typ des IEnumerable?
grüße
-
sorry, hab die lösung gefunden.. war doch etwas voreilig:)
Prüfen ob Enumerable:
typeof(IEnumerable).IsAssignableFrom(propertyInfo.PropertyType)
Welcher Type:
propertyInfo.PropertyType.GetGenericArguments()[0]
aber trozdem danke;)
-
NUN hab ich aber noch ein weitere Problem:
Meine PropertyInfo, welches einen IEnumerable Typ hat, möchte ich jetzut nun gern "füllen" bzw. instanziieren!
var list = new List<object>(); foreach (var arrayNodes in elements) { var tmp = Activator.CreateInstance(type); list.Add(ParseNode(arrayNodes, tmp)); } propertyInfo.SetValue(obj, list, null);
leider bekomme ich an der stelle "SetValue" eine exception, weil er eine Emnumerabke von erwarteten Typ "type" erwartet, aber ich habe ja ein "object" list.. wie kann ich das bewerkstelligen, dass ich via refelection eine getypte liste instanziieren kann!?
-
Ungetestet, da kein Compiler zur Hand:
var list = Activator.CreateInstance(typeof(List<>).MakeGenericType(type));
-
hammer
danke
heier meine varainte als array
var list = Array.CreateInstance(genericType, size);
leider muss hier die größe bekannt sein.. und is deswegen auch keine liste mehr..
-
Aber Lord,
bei deiner variante muss ich das ding ja auf eine "List<>" casten, damit ich elemente hinzufügen kann!? hm...
-
Du kannst das Objekt auf eine IList (untypisiert) casten, um Objekte hinzuzufügen.
-
Oder ganz einfach mit ReflectionConverter
-
DAnke, aber jetzt hab ich noch ne weitere Frage?
wie bekomme ich von einem "IEnumerable" Type die Anzahlt der Elemente aus dem Enumerabke!?
ich hab eine propertyInfo, welches ein "IEnumerable" ist, und auch die Instance! Wie komm ich nun rückwirkend an die Größe!?
Grüße
-
Linq -> Count() oder foreach und Zähler
-
IEnumerable hat kein "Count" member....
aber über den Enumerator geht auch , danke:)
-
NullbockException schrieb:
IEnumerable hat kein "Count" member....
Das ist richtig, war aber nicht meine Antwort:
PuppetMaster2k schrieb:
Linq -> Count()
Ich habe nicht umsonst, Linq und () geschrieben.
-
ich kann dir nich folgen:) bisschen code bitte:)
-
-
NullbockException schrieb:
ich kann dir nich folgen:) bisschen code bitte:)
linq count() == foreach (...) n++