How would I test a property of a type to see if it is a specified type?
EDIT: My goal is to examine an assembly to see if any of the types in that assembly contain properties that are MyType (or inherited from MyType).
Here is the track I've gone down…
AssemblyName n = new AssemblyName();
n.CodeBase = "file://" + dllName;
Assembly a = AppDomain.CurrentDomain.Load(n);
foreach (Type t in a.GetTypes())
foreach (PropertyInfo pi in t.GetProperties())
if ( pi.PropertyType is MyType ) // warning CS0184
Console.WriteLine("Found a property that is MyType");
This compiles with warning CS0184: The given expression is never of the provided ('MyType') type
Best Solution
What type are you interested in? The return type of the method/property/event etc?
If so, I don't think there's anything in
MemberInfo
to let you get at it directly - you'll need to cast and useMethodInfo.ReturnType
,PropertyInfo.PropertyType
,FieldInfo.FieldType
,EventInfo.EventHandlerType
and any others I've forgotten. (Remember that types themselves can be members. Not sure what you'll want to do with them!)EDIT: If you're interested in whether a specific Type represents either MyType or some subclass, then use Type.IsAssignableFrom:
EDIT: Now that we know you want properties, it's easy - use GetProperties instead of GetMembers. I like doing reflection with LINQ:
If you're not a fan of LINQ:
Note that you might want to specify binding flags to get non-public properties etc.