Link to home
Start Free TrialLog in
Avatar of phuff34
phuff34

asked on

Object does not match target type using C# Reflection

I need to discover the value of a property in a class by using reflection.

I need to create a form with a property grid that dynamically binds to a class object of which could change as it will be based on a collection in another program.  I have a class that I generate on the fly by creating and compiling an assembly at runtime.  I have two versions: an assembly with one class and an assembly with multiple classes.  The single class version works great.

With multiple classes I have a reference key that I use to keep track of which class represents which object (which happen to be Autodesk Inventor objects).  I tried just naming the class the reference key but it sometimes has special characters in it.  What I did was create a property which is in every class called ReferenceKey and I simply want to find the class whose ReferenceKey property is the same as the one I pass in.  I get and exception error: "Object does not match target type."

Here is the code:

 public static object getClassObject(Assembly theAsm, string refKey)
        {
            object resultClass = null;

            foreach (Type type in theAsm.GetTypes())
            {
                if (type.IsClass)
                {
                    PropertyInfo pi = type.GetProperty("ReferenceKey");
                    object value = null;
                    value = pi.GetValue(type, null);
                    string sValue = value as string;

                    if (sValue != null)
                    {
                        if (sValue == refKey)
                        {
                            try
                            {
                                resultClass = Activator.CreateInstance(type);
                            }
                            catch { }
                        }
                    }
                }
            }

            return resultClass;
        }

Any ideas on what I'm doing wrong?  Do I need to explain anything a little better?

Thanks,

Paul Huff
ASKER CERTIFIED SOLUTION
Avatar of dstanley9
dstanley9

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of phuff34
phuff34

ASKER

Worked like a charm, thanks!