Ruft den tatsächlichen Typ eines generischen Objektparameters ab

8

Zweifellos wurden Elemente dieser Frage schon einmal gestellt, aber ich habe Probleme, eine Antwort zu finden. (Disclaimer: Dies ist verwandt, aber getrennt von einer kürzlich gestellten Frage).

Ich habe eine Methode wie folgt:

%Vor%

Das funktioniert gut, wenn ich es so nenne:

%Vor%

Allerdings muss ich diese Methode mit einem generischen Typ aufrufen, daher rufe ich es so auf:

%Vor%

Nun weiß intellisense, dass "Wert" in Methode & lt; T & gt; ist welcher Typ valueType ist (sagen wir "FooObject"). Aber 'T' ist Objekt, was bedeutet, dass eine List & lt; FooObject & gt; ist nicht zuweisbar von einer Liste & lt; T & gt; (d. h. ein List & lt; Objekt & gt;).

Ich habe vorher versucht, Convert.ChangeType für die Variable ('passValue') zu verwenden, aber das war nicht sinnvoller.

Wie kann ich eine Variable nicht in den Typ einer Typvariablen umwandeln? Wie kann ich das umgehen?

Ist die beste Lösung, sich irgendwie nicht auf IsAssignableFrom zu verlassen und eine losere Typüberprüfung durchzuführen, ob das funktioniert? Das Problem dabei ist, dass ich nicht sicher bin, ob ich den MemberValue richtig darstellen kann, es sei denn, T ist wirklich der Elementtyp von memberValue.

    
Matt Mitchell 03.09.2009, 03:49
quelle

2 Antworten

4

Sie haben Glück. Ich musste vor ein paar Wochen etwas sehr ähnliches machen .

Eine detaillierte Erklärung finden Sie im obigen Blogpost, aber grundsätzlich besteht die allgemeine Idee darin, den Typ zu reflektieren und die Methode manuell mit einem expliziten Parametersatz aufzurufen.

%Vor%

Es ist nicht sehr Typ sicher, aber es macht genau das, wonach Sie suchen.

%Vor%

Ausgabe

%Vor%     
Nathan Taylor 03.09.2009, 04:01
quelle
5

Dies sollte Ihnen eine aufrufbare Methode geben (ich werde es in Kürze testen). Das Boxing / Unboxing, das es verursacht, ist viel schneller als die Sicherheitsprüfungen, die für den Aufruf der Reflection-API erforderlich sind (was auch Boxen erfordert).

%Vor%     
Sam Harwell 03.09.2009 04:13
quelle

Tags und Links