如何安全地检查动态对象是否有字段

本文关键字:对象 动态 是否 字段 检查 何安全 安全 | 更新日期: 2023-09-27 18:20:57

我正在动态对象上的一个属性中循环寻找字段,只是我不知道如何在不引发异常的情况下安全地评估它是否存在。

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

如何安全地检查动态对象是否有字段

使用反射比尝试捕获更好,所以这是我使用的函数:

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

那么。。

if (doesPropertyExist(myDynamicObject, "myProperty")){
    // ...
}

这很简单。设置一个条件,检查值是否为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"];
            }
        }

您需要用try-catch来包围您的动态变量,没有其他方法是使其安全的更好方法。

try
{
    dynamic testData = ReturnDynamic();
    var name = testData.Name;
    // do more stuff
}
catch (RuntimeBinderException)
{
    //  MyProperty doesn't exist
}