Wie teste ich auf typeof (dynamisch)?

8

Ich habe eine generische Methode TResult Foo<TSource, TResult>(IEnumerable<TSource> source) und wenn TResult als dynamic deklariert ist, möchte ich einen anderen Code Pfad als für andere Typ Deklarationen ausführen.

Für normale Typen können Sie Dinge wie:

tun %Vor%

Aber if (typeof(TResult) == typeof(dynamic)) kompiliert nicht.

Gibt es trotzdem eine solche Bestimmung zur Laufzeit, wenn die Methode mit der Deklaration aufgerufen wird:

%Vor%

Da Dynamik selbst kein Typ ist, worauf sollte ich testen? IDynamicMetaObjectProvider ?

BEARBEITEN Dies ist Teil eines SQL-Texts für System.Linq.Expression-Evaluator. Der spezifische Wunsch zu verzweigen, wenn TResult dynamisch ist, ist für eine Pseudologik, die in etwa so aussieht:

%Vor%     
dkackman 21.10.2009, 04:38
quelle

2 Antworten

10

Einfach gesagt kann man das nicht, weil es keine Typ-Dynamik gibt. Im Typ dynamic wird als Objekt mit einem speziellen Attribut (Dynamic) angehängt, wenn der Typ in Metadaten erscheint. Im wesentlichen sagt typeof (dynamisch) für die meisten Zwecke nicht anders als typeof (object).

    
JaredPar 21.10.2009, 04:43
quelle
1

Es ist nicht notwendig, dass ein Objekt, das als dynamic deklariert ist, ein bestimmter Objekttyp ist. Es kann eine Unterklasse von DynamicObject sein (und somit eine spezifische Logik für Operationen bereitstellen), aber es kann auch ein normales Objekt sein (wie @JaredPar sagte).

Vielleicht, wenn Sie erklären, welche Art von Zweig Sie für dynamic -Objekte machen möchten, wäre es möglich, eine bessere Lösung zu finden.

    
elder_george 21.10.2009 04:45
quelle

Tags und Links