Tengo un método genérico TResult Foo<TSource, TResult>(IEnumerable<TSource> source)
y si TResult
está declarado como dynamic
, quiero ejecutar una ruta de código diferente a la de otras declaraciones de tipos.¿Cómo pruebo para typeof (dinámico)?
Para los tipos regulares que se pueden hacer cosas como:
if (typeof(TResult) == typeof(int))
return ExpressionFactory.CreateExpandoFunction<TSource, TResult>();
Pero if (typeof(TResult) == typeof(dynamic))
no compila.
¿Hay alguna forma de hacer este tipo de determinación en tiempo de ejecución cuando se llama al método con la declaración:
dyanmic x = Foo<int, dynamic>(list);
Desde dinámica en sí misma no es un tipo de lo que debería estar probando para? IDynamicMetaObjectProvider
?
EDIT Esto es parte de un texto SQL para System.Linq.Expression evaluator. El deseo específico para ramificar si TResult
es dinámico es para algunos seudo lógica que se ve algo como esto:
if (type is struct)
create selector that initializes each element to result values
else if (type is class)
create selector that initialize each element to new instance and set member properties
else if (type is dynamic)
create selector that initializes each element to new `ExpandoObject` and populates/sets member properties
¿Necesita esto? – Gishu