У меня есть объект анонимного типа, который я получаю как динамический из метода, который я хотел бы проверить, существует ли свойство для этого объекта.
....
var settings = new {
Filename="temp.txt",
Size=10
}
...
function void Settings(dynamic settings) {
var exists = IsSettingExist(settings,"Filename")
}
Как мне реализовать IsSettingExist?
Ответы:
Вывод:
источник
ViewBag
? Если да, см. Stackoverflow.com/a/24192518/70345Is
префикса сбивает с толку больше, чем его можно было бы использовать в противном случаеHasProperty
. Я бы также сказал, что использование такого грамматически неверного префикса на самом деле не идиоматично в C♯.источник
objType.GetProperty(name) != null;
возвращает null для свойств, которые действительно существуютobjType.GetProperty(name) != null
всегда будет возвращать abool
, чего (по определению) никогда не может бытьnull
.Type.GetProperty(string)
несуществующее свойство возвращает что-либо, кроме null.Если вы можете управлять созданием / передачей объекта настроек, я бы рекомендовал вместо этого использовать ExpandoObject.
источник
Это работает для анонимных типов или всего
ExpandoObject
, кNancy.DynamicDictionary
чему можно привестиIDictionary<string, object>
.источник
Это работает для меня:
источник
RuntimeBinderException
иdynamicObj[property].Value
когда значение на самом деле есть ...var value = dynamicObj[property]
достаточно ... и когда она не существуетKeyNotFoundException
наDictionary
брошено ... смотрите далее ...Ни одно из решений выше работал ,
dynamic
что приходит отJson
, я тем не менее удалось превратить один сTry catch
(на @ user3359453) путем изменения типа исключения брошенную (KeyNotFoundException
вместоRuntimeBinderException
) в то , что на самом деле работает ...Надеюсь, это сэкономит вам время.
источник
Объединение и исправление ответов от Serj-TM и user3359453, чтобы он работал как с ExpandoObject, так и с DynamicJsonObject. У меня это работает.
источник
Используя отражение, я использую эту функцию:
затем..
источник
Where
Сначала используйте лямбда-выражение , а затем оноAny
является избыточным, так как вы также можете сформулировать свое выражение фильтрацииAny
.Если кому-то нужно обрабатывать динамический объект, исходящий из Json, я изменил ответ Сета Рино для обработки динамического объекта, десериализованного из NewtonSoft.Json.JObjcet.
источник
Чтобы расширить ответ от @Kuroro, если вам нужно проверить, пусто ли свойство, ниже должно работать.
источник