J'ai un objet de type anonyme que je reçois en tant que dynamique d'une méthode que je voudrais vérifier qu'une propriété existe sur cet objet.
....
var settings = new {
Filename="temp.txt",
Size=10
}
...
function void Settings(dynamic settings) {
var exists = IsSettingExist(settings,"Filename")
}
Comment implémenter IsSettingExist?
Réponses:
Production:
la source
ViewBag
? Si tel est le cas, voir stackoverflow.com/a/24192518/70345Is
préfixe est plus déroutant qu'il ne le serait autrementHasProperty
. Je dirais aussi que l'utilisation d'un préfixe grammaticalement incorrect comme celui-ci n'est en fait pas idiomatique en C♯.la source
objType.GetProperty(name) != null;
renvoie null sur les propriétés qui existentobjType.GetProperty(name) != null
retournera toujours abool
, ce qui (par définition) ne peut jamais êtrenull
.Type.GetProperty(string)
pour une propriété inexistante renvoie autre chose que null.si vous pouvez contrôler la création / la transmission de l'objet de paramètres, je vous recommande d'utiliser un ExpandoObject à la place.
la source
Cela fonctionne pour des types anonymes,
ExpandoObject
,Nancy.DynamicDictionary
ou toute autre chose qui peut être exprimées pourIDictionary<string, object>
.la source
Cela fonctionne pour moi-:
la source
RuntimeBinderException
etdynamicObj[property].Value
quand la valeur est réellement là ...var value = dynamicObj[property]
suffit ... et quand elle n'existe pas,KeyNotFoundException
onDictionary
jette ... voir ci-dessous ...Aucune des solutions ci-dessus n'a fonctionné pour
dynamic
celaJson
, j'ai cependant réussi à en transformer une avecTry catch
(par @ user3359453) en changeant le type d'exception lancé (KeyNotFoundException
au lieu deRuntimeBinderException
) en quelque chose qui fonctionne réellement ...J'espère que cela vous fera gagner du temps.
la source
Fusion et correction des réponses de Serj-TM et user3359453 afin qu'il fonctionne à la fois avec ExpandoObject et DynamicJsonObject. Cela fonctionne pour moi.
la source
En utilisant la réflexion, c'est la fonction que j'utilise:
puis..
la source
Where
, puisAny
est redondant, car vous pouvez également formuler votre expression de filtrageAny
.Au cas où quelqu'un aurait besoin de gérer un objet dynamique provenant de Json, j'ai modifié la réponse de Seth Reno pour gérer l'objet dynamique désérialisé de NewtonSoft.Json.JObjcet.
la source
Pour étendre la réponse de @Kuroro, si vous devez tester si la propriété est vide, ci-dessous devrait fonctionner.
la source