troubleshooting Question

Object does not match target type using C# Reflection

Avatar of phuff34
phuff34 asked on
.NET ProgrammingEditors IDEs
2 Comments1 Solution10859 ViewsLast Modified:
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
Join the community to see this answer!
Join our exclusive community to see this answer & millions of others.
Unlock 1 Answer and 2 Comments.
Join the Community
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 2 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros