bool isDefined = false;
object axis = null;
try
{
axis = this.ChartDetails.Chart.LeftYAxis;
isDefined = true;
}
catch(RuntimeBinderException)
{ }
Это то, что происходит во время выполнения в первую очередь. (Когда вы получаете доступ к свойству «динамический» часть вещей происходит только тогда, когда первый шанс исключение получает обрабатывается переопределением объекта из DynamicObject
«s TryGetMember
и TrySetMember
некоторых объектов (например, ExpandoObject
) на самом деле являются словарями под капотом и вы можете проверить их непосредственно следующим образом:
bool isDefined = ((IDictionary<string, object>)this.ChartDetails.Chart)
.ContainsKey("LeftYAxis");
в принципе: не зная, что фактического типа ChartDetails.Chart
является (если это ExpandoObject
простого старина подкласс object
или подкласс DynamicObject
) нет никакого способа, кроме попробуйте/поймайте выше. Если вы написали код для ChartDetails
и Chart
или имеете доступ к исходному коду, вы можете определить, какие существуют методы для объекта, и использовать те, которые нужно проверить.
если this.ChartDetails.Chart.LeftYAxis! = NULL –
Является ли это * ваш * реализация DynamicObject? – Tigran
Возможный дубликат [как определить, существует ли свойство на динамическом объекте в C#?] (Http://stackoverflow.com/questions/2839598/how-to-detect-if-a-property-exists-on-a -dynamic-object-in-c) – jason