Tengo un objeto de tipo anónimo que recibo como dinámico de un método que me gustaría comprobar si existe una propiedad en ese objeto.
....
var settings = new {
Filename="temp.txt",
Size=10
}
...
function void Settings(dynamic settings) {
var exists = IsSettingExist(settings,"Filename")
}
¿Cómo implementaría IsSettingExist?
Respuestas:
Salida:
fuente
ViewBag
? Si es así, consulte stackoverflow.com/a/24192518/70345Is
prefijo es más confuso de lo que sería de otra maneraHasProperty
. También diría que usar un prefijo gramaticalmente incorrecto como este en realidad no es idiomático en C♯.fuente
objType.GetProperty(name) != null;
devuelve nulo en propiedades que existenobjType.GetProperty(name) != null
siempre devolverá abool
, que (por definición) nunca puede sernull
.Type.GetProperty(string)
una propiedad inexistente devuelve algo que no sea nulo.si puede controlar la creación / transmisión del objeto de configuración, le recomendaría usar un ExpandoObject en su lugar.
fuente
Esto funciona para tipos anónimos
ExpandoObject
,Nancy.DynamicDictionary
o cualquier otra cosa a la que se pueda enviarIDictionary<string, object>
.fuente
Esto es trabajo para mí-:
fuente
RuntimeBinderException
ydynamicObj[property].Value
cuando el valor es realmente allí ...var value = dynamicObj[property]
es suficiente ... y cuando no existeKeyNotFoundException
enDictionary
se lanza ... ver más adelante ...Ninguna de las soluciones anteriores funcionó para
dynamic
esoJson
, sin embargo, logré transformar una conTry catch
(por @ user3359453) cambiando el tipo de excepción lanzada (enKeyNotFoundException
lugar deRuntimeBinderException
) en algo que realmente funciona ...Espero que esto te ahorre algo de tiempo.
fuente
Fusionar y corregir respuestas de Serj-TM y user3359453 para que funcione con ExpandoObject y DynamicJsonObject. Esto funciona para mi.
fuente
Usando la reflexión, esta es la función que uso:
luego..
fuente
Where
primero, y luegoAny
es redundante, ya que también puede formular su expresión de filtradoAny
.En caso de que alguien necesite manejar un objeto dinámico proveniente de Json, modifiqué la respuesta de Seth Reno para manejar el objeto dinámico deserializado de NewtonSoft.Json.JObjcet.
fuente
Para extender la respuesta de @Kuroro, si necesita probar si la propiedad está vacía, a continuación debería funcionar.
fuente