Si va a almacenar el objeto como tipo object
, es necesario utilizar la reflexión. Esto es cierto para cualquier tipo de objeto, anónimo o no. En un objeto O, puede obtener su tipo:
Type t = o.GetType();
Luego de eso se mira una propiedad:
PropertyInfo p = t.GetProperty("Foo");
Luego de que se puede obtener un valor:
object v = p.GetValue(o, null);
Esta respuesta ha sido retrasada hace mucho tiempo para una actualización de C# 4:
dynamic d = o;
object v = d.Foo;
Y ahora otra alternativa en C# 6:
object v = o?.GetType().GetProperty("Foo")?.GetValue(o, null);
Tenga en cuenta que mediante el uso de ?.
hacemos que la v
el resultado es null
en tres situaciones diferentes!
o
es null
, por lo que no hay ningún objeto en absoluto
o
es no- null
pero no tiene una propiedad Foo
o
tiene una propiedad Foo
pero su valor real pasa a ser null
.
Esto no es equivalente a los ejemplos anteriores, pero puede tener sentido si desea tratar los tres casos de la misma manera.
nunca utilizó una dinámica antes hasta ahora, buena actualización para .NET 4.0 – Alan
woow, bueno para C# 4 = D este trabajo para mí – ch2o
en la solución C# 4 obtendrá la excepción de tiempo de ejecución si la propiedad no existe ('objeto v = d.Foo'), mientras que' GetValue (o, null) 'será nula si no existe. – kobe