In einem Teil meines Codes habe ich eine Sammlung von Objekten vom Typ T
übergeben. Ich weiß nicht, welche konkrete Sammlung ich weitergeben werde, außer dass es IEnumerable
macht.
Zur Laufzeit muss ich herausfinden, welcher Typ T ist (z. B. System.Double
, System.String
usw.).
Gibt es eine Möglichkeit, es herauszufinden?
UPDATE : Ich sollte vielleicht den Kontext, in dem ich arbeite (Linq Provider), etwas genauer erläutern.
Meine Funktion hat eine Signatur wie die folgende, wobei ich den Typ der Sammlung als Parameter erhalte:
%Vor% Gibt es einen Weg von collectionType
, um den enthaltenen Objekttyp zu erhalten?
wird Ihnen den Typ des Objekts geben.
Dann sollten Sie wahrscheinlich Ihre gewünschten Typen testen:
%Vor% Warum nicht einfach ein IEnumerable<T>
implementieren? ZB:
public void MyFunc<T>(IEnumerable<T> objects)
Außerdem sollten Sie besser den Typ jedes einzelnen Objekts überprüfen, indem Sie is
oder .GetType
verwenden, anstatt zu versuchen, es aus dem Container selbst heraus zu arbeiten.
Wenn das aber keine Option ist und Sie wirklich den Typ des Basiscontainers kennen müssen, müssten Sie im Grunde mit is
überprüfen, welche Interfaces es implementiert (zB: IList<int>
etc). Odds sind der Typ Ihres Arrays wird ein generischer sein, was bedeutet, dass man versucht, von seinem Namen zurück zu arbeiten, bis der Datentyp ziemlich unordentlich ist.
Nun, ich bin viel zu spät hier, aber sollte das nicht funktionieren:
%Vor%Ich benutze dynamische viel und das ist ein Problem von Zeit zu Zeit.
Matt Davis hat es genagelt, aber Sie brauchen den Index:)
%Vor%Der Typ entspricht dem, was Sie erwarten würden. Es ist der Typ des Objekts, das in der Sammlung enthalten ist, und nicht die generischen Typen, die ihn umgeben.
Tags und Links c# reflection collections