【问题标题】:check to see if a property exists within a C# Expando class检查 C# Expando 类中是否存在属性
【发布时间】:2012-08-16 04:26:19
【问题描述】:

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

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

这样的……

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

【问题讨论】:

标签: c# dynamic expandoobject


【解决方案1】:

试试:

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

ExpandoObject 显式实现 IDictionary&lt;string, Object&gt;,其中 Key 是属性名称。然后,您可以检查字典是否包含该键。如果你需要经常做这种检查,你也可以写一个小辅助方法:

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

然后像这样使用它:

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

【讨论】:

    【解决方案2】:

    根据 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");
    

    【讨论】:

    • 这可能会很好,但 C# 不允许在动态对象上使用扩展方法。见 [stackoverflow.com/questions/12501773/….
    • 向 expando 对象添加一个名为 HasAttr 的动态方法怎么样?像这样:expando.HasAttr = new Func((string key) => ((IDictionary) expando).ContainsKey(key));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2021-04-22
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多