除非变量v是null:否则以下代码将始终返回true :
v is dynamic
Run Code Online (Sandbox Code Playgroud)
并且以下测试将无法编译("typeof运算符不能用于动态类型"):
v.GetType() == typeof(dynamic)
Run Code Online (Sandbox Code Playgroud)
那么有没有办法测试变量是否dynamic?
Mar*_*ell 18
首先,您需要将变量和对象分开.如果变量定义为,则dynamic变量是动态的.就这些.没有更多.一个场或财产将与被标注[Dynamic]属性,即
public dynamic Foo {get;set;}
Run Code Online (Sandbox Code Playgroud)
实际上是:
[Dynamic]
public object Foo {get;set;}
Run Code Online (Sandbox Code Playgroud)
这基本上作为编译器通过dynamicAPI而不是通过OOP API 访问对象的提示.
如果一个对象dynamic实现了它就支持全部功能IDynamicMetaObjectProvider- 但是,这样的对象可以通过dynamicAPI和常规OOP API(它可以同时具有)来访问.同样,IDynamicMetaObjectProvider可以通过任一API访问未实现的对象(但是:只有公共成员才可以通过dynamic).
Krz*_*lak 12
没有调用CLR类型dynamic.C#编译器生成所有dynamic类型的值,object然后调用自定义绑定代码来确定如何处理它们.如果dynamic使用,它将显示为Object.
但是您可以检查实例是否是类型,IDynamicMetaObjectProvider或者您可以检查类型是否实现IDynamicMetaObjectProvider