Wie man den in einer Sammlung enthaltenen Typ durch Reflektion erhält

7

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?

    
Stefano Ricciardi 14.12.2009, 11:25
quelle

7 Antworten

14

Aus Matt Warrens Blog :

%Vor%     
dtb 14.12.2009, 11:32
quelle
8
%Vor%

gibt ein Array vom Typ args zurück.

    
nitzmahone 14.12.2009 11:29
quelle
0
%Vor%

wird Ihnen den Typ des Objekts geben.

Dann sollten Sie wahrscheinlich Ihre gewünschten Typen testen:

%Vor%     
Oliver Friedrich 14.12.2009 11:27
quelle
0

Kannst du nicht einfach t.GetType () dazu benutzen?

    
Joel Cunningham 14.12.2009 11:28
quelle
0

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.

    
fyjham 14.12.2009 11:28
quelle
0

Nun, ich bin viel zu spät hier, aber sollte das nicht funktionieren:

%Vor%     
Vishal Anand 30.10.2016 11:41
quelle
0

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.

    
user2173653 11.08.2017 04:20
quelle

Tags und Links