10

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

很像 python 中的hasattr函数。我想要 hasattr 的 c# 等价物。

像这样的东西......

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

2 回答 2

23

尝试:

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...
}
于 2012-08-20T20:16:54.833 回答
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");
于 2013-04-13T10:30:03.323 回答