Проверьте, существует ли свойство в классе 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");