Dynamic Object - How to tell if a property is defined?
c#, dynamic
Solution
bool isDefined = false;
object axis = null;
try
{
axis = this.ChartDetails.Chart.LeftYAxis;
isDefined = true;
}
catch(RuntimeBinderException)
{ }
This is what happens at runtime in the first place. (When you access a property the 'dynamic' piece of things only happens when a first-chance exception gets handled by the object's override of `DynamicObject`'s `TryGetMember` and `TrySetMember`
Some objects (like `ExpandoObject`) are actually dictionaries under the hood and you can check them directly as follows:
bool isDefined = ((IDictionary<string, object>)this.ChartDetails.Chart)
.ContainsKey("LeftYAxis");
Basically: without knowing what actual type `ChartDetails.Chart` is (if it's an `ExpandoObject` a plain ol' subclass of `object` or a subclass of `DynamicObject`) there's no way besides the try/catch above. If you wrote the code for `ChartDetails` and `Chart` or have access to the source code you can determine what methods exist for the object and use those to check.
Problem
I have a dynamic object that looks as follows: ``` this.ChartDetails.Chart ``` 'Chart' is dynamic. I want to see if a dynamic property exists on Chart named LeftYAxis. What is the best way to do this on dynamic objects? I don't think this is a duplicate of How to detect if a property exists on an ExpandoObject? because it doesn't discuss the best method to do this for dynamic objects.