Проверьте, существует ли свойство в классе C# Expando

Я хотел бы видеть, существует ли свойство в C# Expando Class.

очень похоже на функцию hasattr в python. Я хотел бы, чтобы C# равнялся hasattr.

что-то вроде этого...

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

2 ответа

Решение

Пытаться:

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

ExpandoObject явно реализует IDictionary<string, Object>где Ключ - это имя свойства. Затем вы можете проверить, содержит ли словарь ключ. Вы также можете написать небольшой вспомогательный метод, если вам нужно часто выполнять такую ​​проверку:

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

И используйте это так:

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

Согласно ответу 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");
Другие вопросы по тегам