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
Our community of experts have been thoroughly vetted for their expertise and industry experience.