bool isDefined = false;
object axis = null;
try
{
axis = this.ChartDetails.Chart.LeftYAxis;
isDefined = true;
}
catch(RuntimeBinderException)
{ }
Esto es lo que ocurre en tiempo de ejecución en primer lugar. (Al acceder a una propiedad de la pieza 'dinámica' de las cosas sólo ocurre cuando una excepción de primera oportunidad se maneja por anulación del objeto de TryGetMember
y TrySetMember
Algunos objetos DynamicObject
's (como ExpandoObject
) son en realidad los diccionarios bajo el capó y se puede comprobar directamente la siguiente manera:
bool isDefined = ((IDictionary<string, object>)this.ChartDetails.Chart)
.ContainsKey("LeftYAxis");
Básicamente: sin saber de qué real tipo ChartDetails.Chart
es (si es un ExpandoObject
un ol llano' subclase de object
o una subclase de DynamicObject
) no hay manera, además de la intenta/atrapa arriba. Si escribió el código para ChartDetails
y Chart
o tiene acceso al código fuente, puede determinar qué métodos existen para el objeto y usarlos para verificar.
si this.ChartDetails.Chart.LeftYAxis! = Null –
¿Este es su aplicación * * de DynamicObject? – Tigran
posible duplicado de [cómo detectar si una propiedad existe en un objeto dinámico en C#?] (Http://stackoverflow.com/questions/2839598/how-to-detect-if-a-property-exists-on-a -dynamic-object-in-c) – jason