如何测试typeof(动态)?

我有一个generics方法TResult Foo(IEnumerable source)如果TResult被声明为dynamic我想要执行与其他类型声明不同的代码路径。

对于常规类型,您可以执行以下操作:

 if (typeof(TResult) == typeof(int)) return ExpressionFactory.CreateExpandoFunction(); 

但是if (typeof(TResult) == typeof(dynamic))不能编译。

无论如何,在使用声明调用方法时,在运行时进行此类确定:

 dyanmic x = Foo(list); 

由于动态本身不是一种类型,我应该测试什么? IDynamicMetaObjectProvider

编辑这是System.Linq.Expression评估程序的SQL文本的一部分。 如果TResult是动态的,那么分支的特定愿望是某些伪逻辑看起来像这样:

 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 

简单地说,你不能,因为没有类型动态。 在类型中,如果类型出现在元数据中,则动态写为具有附加特殊属性(动态)的对象。 基本上,对于大多数用途,typeof(动态)与typeof(对象)没有什么不同。

声明为dynamic对象不一定是某种特定类型的对象。 它可以是DynamicObject的子类(因此为操作查找提供特定的逻辑),但它也可以是普通对象(如@JaredPar所述)。

也许,如果你解释一下你想为dynamic对象做什么样的分支,就有可能找到更好的解决方案。