9

我正在遍历动态对象上的属性以查找字段,但我无法弄清楚如何在不引发异常的情况下安全地评估它是否存在。

        foreach (dynamic item in routes_list["mychoices"])
        {
            // these fields may or may not exist
           int strProductId = item["selectedProductId"];
           string strProductId = item["selectedProductCode"];
        }
4

3 回答 3

5

使用反射比 try-catch 更好,所以这是我使用的函数:

public static bool doesPropertyExist(dynamic obj, string property)
{
    return ((Type)obj.GetType()).GetProperties().Where(p => p.Name.Equals(property)).Any();
}

然后..

if (doesPropertyExist(myDynamicObject, "myProperty")){
    // ...
}
于 2016-12-02T11:29:17.330 回答
1

这会很简单。设置一个检查值为 null 或空的条件。如果该值存在,则将该值分配给相应的数据类型。

foreach (dynamic item in routes_list["mychoices"])
        {
            // these fields may or may not exist

            if (item["selectedProductId"] != "")
            {
                int strProductId = item["selectedProductId"];
            }

            if (item["selectedProductCode"] != null && item["selectedProductCode"] != "")
            {
                string strProductId = item["selectedProductCode"];
            }
        }
于 2013-07-03T03:49:06.277 回答
-1

你需要用 try catch 来包围你的动态变量,没有其他更好的方法来保证它的安全。

try
{
    dynamic testData = ReturnDynamic();
    var name = testData.Name;
    // do more stuff
}
catch (RuntimeBinderException)
{
    //  MyProperty doesn't exist
} 
于 2013-07-03T03:50:08.840 回答