一尘不染

测试动态变量上的属性是否可用

c#

我的情况很简单。在我的代码的某个地方,我有这个:

dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame();

//How to do this?
if (myVariable.MyProperty.Exists)   
//Do stuff

因此,基本上我的问题是如何检查(不引发异常)动态变量上是否有某个属性可用。我可以,GetType()但是我宁愿避免这种情况,因为我真的不需要知道对象的类型。我真正想知道的只是一个属性(或方法,如果使生活更轻松)是否可用。有指针吗?


阅读 232

收藏
2020-05-19

共1个答案

一尘不染

我认为dynamic除非您重新实现了在C#编译器中处理动态绑定的方式,否则就无法在不尝试访问变量的情况下找出变量是否具有某个成员。根据C#规范,这可能包括很多猜测,因为它是实现定义的。

因此,如果失败,您实际上应该尝试访问该成员并捕获异常:

dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame();

try
{
    var x = myVariable.MyProperty;
    // do stuff with x
}
catch (RuntimeBinderException)
{
    //  MyProperty doesn't exist
}
2020-05-19