我的情况很简单。在我的代码的某个地方,我有这个:
dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame(); //How to do this? if (myVariable.MyProperty.Exists) //Do stuff
因此,基本上我的问题是如何检查(不引发异常)动态变量上是否有某个属性可用。我可以,GetType()但是我宁愿避免这种情况,因为我真的不需要知道对象的类型。我真正想知道的只是一个属性(或方法,如果使生活更轻松)是否可用。有指针吗?
GetType()
我认为dynamic除非您重新实现了在C#编译器中处理动态绑定的方式,否则就无法在不尝试访问变量的情况下找出变量是否具有某个成员。根据C#规范,这可能包括很多猜测,因为它是实现定义的。
dynamic
因此,如果失败,您实际上应该尝试访问该成员并捕获异常:
dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame(); try { var x = myVariable.MyProperty; // do stuff with x } catch (RuntimeBinderException) { // MyProperty doesn't exist }