Search code examples
c#dynamicdynamic-keyword

Test if a property is available on a dynamic variable


My situation is very simple. Somewhere in my code I have this:

dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame();

//How to do this?
if (myVariable.MyProperty.Exists)   
//Do stuff

So, basically my question is how to check (without throwing an exception) that a certain property is available on my dynamic variable. I could do GetType() but I'd rather avoid that since I don't really need to know the type of the object. All that I really want to know is whether a property (or method, if that makes life easier) is available. Any pointers?


Solution

  • I think there is no way to find out whether a dynamic variable has a certain member without trying to access it, unless you re-implemented the way dynamic binding is handled in the C# compiler. Which would probably include a lot of guessing, because it is implementation-defined, according to the C# specification.

    So you should actually try to access the member and catch an exception, if it fails:

    dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame();
    
    try
    {
        var x = myVariable.MyProperty;
        // do stuff with x
    }
    catch (RuntimeBinderException)
    {
        //  MyProperty doesn't exist
    }