Siehe Code unten zum Beispiel. Der Schlüssel ist, Generics zu verwenden, die Erweiterungsmethode wurde nur für die nette Syntax verwendet.
%Vor%Ergebnis:
%Vor%BEARBEITEN: Sie können hier auch die Erweiterungsmethode vermeiden, da sie in alle IntelliSense-Dropdownlisten angezeigt wird. Siehe ein anderes Beispiel:
%Vor%erzeugt auch korrekte Ergebnisse.
Dies ist nicht möglich, ohne den fraglichen Code zu analysieren.
Zur Laufzeit stehen nur zwei Teile von Typinformationen zur Verfügung, der tatsächliche Typ eines Wertes (über object.GetType ()) und, falls die betreffende Variable ein Parameter oder eine Klasse / Instanzvariable ist die Eigenschaft FieldType in einer FieldInfo, PropertyType auf einer PropertyInfo oder ParameterType für eine ParameterInfo.
Da der Wert, der an Sie weitergegeben wurde, über mehrere Variablen auf Ihrem Weg zu Ihnen gekommen sein kann, ist die Frage nicht einmal gut definiert, fürchte ich.
Ah - Ich sehe, dass Sie nur den Typ wollen, wie er derzeit in der Methode definiert ist, die Expression-Funktion liefert dies (Romans Antwort zeigt eine gute Methode dazu), aber Vorsicht, dies außerhalb der Methode zu verwenden ... Im Wesentlichen Sie lassen die generische Typinferenz des Compilers auf den fraglichen Typ schließen, aber das bedeutet, dass die verwendete Variable nicht immer die Variable ist, die Sie sehen können. Es kann stattdessen die einer synthetisierten Compilervariablen sein, zum Beispiel:
%Vor%Da der Compiler eine temporäre Variable synthetisiert, in der eine Objektreferenz auf x gesetzt wird.
Tags und Links c# types declaration