如何安全地检查动态对象是否有字段
本文关键字:对象 动态 是否 字段 检查 何安全 安全 | 更新日期: 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
}