+ switch (member.MemberType) {
+ // According to docs only these types are allowed
+ case MemberTypes.Constructor:
+ ConstructorInfo CI = (ConstructorInfo) member;
+ if (arguments == null) // null counts as no arguments
+ if (CI.GetParameters().Length != 0)
+ throw new ArgumentException ("Invalid number of arguments for this constructor", "arguments");
+ if (arguments.Count != CI.GetParameters().Length)
+ throw new ArgumentException ("Invalid number of arguments for this constructor", "arguments");
+ return true;
+ case MemberTypes.Method:
+ MethodInfo MI = (MethodInfo) member;
+ if (!MI.IsStatic)
+ throw new ArgumentException ("InstanceDescriptor only describes static (VB.Net: shared) members", "member");
+ if (arguments == null) // null counts as no arguments
+ if (MI.GetParameters().Length != 0)
+ throw new ArgumentException ("Invalid number of arguments for this method", "arguments");
+ if (arguments.Count != MI.GetParameters().Length)
+ throw new ArgumentException ("Invalid number of arguments for this method", "arguments");
+ return true;
+ case MemberTypes.Field:
+ FieldInfo FI = (FieldInfo) member;
+ if (!FI.IsStatic)
+ throw new ArgumentException ("InstanceDescriptor only describes static (VB.Net: shared) members", "member");
+ if (arguments == null) // null counts as no arguments
+ return true;
+ if (arguments.Count == 0)
+ throw new ArgumentException ("Field members do not take any arguments", "arguments");
+ return true;
+ case MemberTypes.Property:
+ PropertyInfo PI = (PropertyInfo) member;
+ if (!(PI.CanRead))
+ throw new ArgumentException ("That property cannot be read", "member");
+ MethodInfo PIM = PI.GetGetMethod();
+ if (!PIM.IsStatic)
+ throw new ArgumentException ("InstanceDescriptor only describes static (VB.Net: shared) members", "member");
+ if (arguments == null) // null counts as no arguments
+ if (PIM.GetParameters().Length != 0)
+ throw new ArgumentException ("Invalid number of arguments for this property", "arguments");
+ if (arguments.Count != PIM.GetParameters().Length)
+ throw new ArgumentException ("Invalid number of arguments for this property", "arguments");
+ return true;
+ }
+ return false;