Take the 2-minute tour ×

I have a dynamic object that looks as follows:


'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 a dynamic object in C#? because it doesn't discuss the best method to do this for dynamic objects.

share|improve this question
if this.ChartDetails.Chart.LeftYAxis != null –  John Gathogo Jun 5 '12 at 14:56
Is this is your implementation of DynamicObject ? –  Tigran Jun 5 '12 at 14:56
possible duplicate of how to detect if a property exists on a dynamic object in C#? –  Jason Jun 5 '12 at 14:56
@JohnGathogo - That does not work. An exception will get thrown because when the object does not exist. –  Randy Minder Jun 5 '12 at 14:59
I tried the method posted by @JohnGathogo and it worked fine. Under what circumstances does it cause an exception to be thrown? –  joelmdev Mar 3 at 20:52

2 Answers 2

up vote 2 down vote accepted
bool isDefined = false;
object axis = null;
    axis = this.ChartDetails.Chart.LeftYAxis;
    isDefined = true;
{ }

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)

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.

share|improve this answer

For a variety of reasons it's best to avoid try/catch blocks for control flow. Therefore, while Christopher's method attains the desired result, I find this preferable:

this.ChartDetails.Chart.GetType().GetProperty("LeftYAxis") != null;
share|improve this answer

Your Answer


