我想看看C#Expando类中是否存在属性。
非常类似于python中的hasattr函数。我想要#atalatr的c#equalant。
像这样......if (HasAttr(model, "Id"))
{
# Do something with model.Id
}
答案 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");