Wie kann ich den Typ von T in einer c # generischen Sammlung von T finden, wenn alles, was ich weiß, der Typ der Sammlung ist?

8

Ich habe ein Array von PropertyInfo, das die Eigenschaften in einer Klasse darstellt. Einige dieser Eigenschaften sind vom Typ ICollection<T> , aber T variiert über die Eigenschaften - ich habe einige ICollection<string> , einige ICollection<int> , etc.

Ich kann leicht erkennen, welche der Eigenschaften vom Typ ICollection<> sind, indem ich die GetGenericTypeDefinition () -Methode für den Typ verwende, aber ich finde es unmöglich, den Typ von T zu erhalten - das int oder die Zeichenfolge in meinem obigen Beispiel / p>

Gibt es eine Möglichkeit, dies zu tun?

%Vor%     
Jason 02.09.2011, 12:27
quelle

3 Antworten

8

Wenn Sie wissen, dass es ICollection<X> ist, aber nicht X, dann ist das ziemlich einfach mit GetGenericArguments :

%Vor%

Es wird schwieriger, wenn der Typ ein Typ ist, der implementiert ICollection<T> , aber möglicherweise selbst generisch ist. Es klingt, als ob du in einer besseren Position bist:)

    
Jon Skeet 02.09.2011, 12:32
quelle
4

Ich glaube, das ist es wonach Sie suchen:

%Vor%

Dadurch erhalten Sie den T-Teil einer generischen Liste & lt; T & gt; zum Beispiel.

    
Kevin Kalitowski 02.09.2011 12:33
quelle
1

Jons Lösung wird T ergeben. Abhängig vom Kontext müssen Sie möglicherweise stattdessen auf den Getter-Rückgabetyp zugreifen, um int, string usw. zu erhalten. Zum Beispiel ...

%Vor%     
blins 02.09.2011 15:06
quelle

Tags und Links