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:
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).
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.