检查C#Expando类中是否存在属性

时间:2012-08-20 20:14:57

标签: c# dynamic expandoobject

我想看看C#Expando类中是否存在属性。

非常类似于python中的hasattr函数。我想要#atalatr的c#equalant。

像这样......

if (HasAttr(model, "Id"))
{
  # Do something with model.Id
}

2 个答案:

答案 0 :(得分:21)

尝试:

dynamic yourExpando = new ExpandoObject();
if (((IDictionary<string, Object>)yourExpando).ContainsKey("Id"))
{
    //Has property...
}

ExpandoObject显式实现IDictionary<string, Object>,其中Key是属性名称。然后,您可以检查字典是否包含密钥。如果你需要经常进行这种检查,你也可以写一个小帮手方法:

private static bool HasAttr(ExpandoObject expando, string key)
{
    return ((IDictionary<string, Object>) expando).ContainsKey(key);
}

并像这样使用它:

if (HasAttr(yourExpando, "Id"))
{
    //Has property...
}

答案 1 :(得分:0)

根据vcsjones的回答,它会更好:

private static bool HasAttr(this ExpandoObject expando, string key)
{
    return ((IDictionary<string, Object>) expando).ContainsKey(key);
}

然后:

dynamic expando = new ExpandoObject();
expando.Name = "Test";

var result = expando.HasAttr("Name");