2

我有一个 MyClass 的实例,定义为:

public partial class MyClass  
{
    public virtual string PropertyName1 { get; set; }
    public virtual IList<Class2List> Class2Lists{ get; set; }
}

我使用反射来尝试找到Remove方法:

object obj1 = myClassObject;
Type type = obj1.GetType();
Type typeSub = type.GetProperty("Class2Lists").PropertyType; 

//this method can not find
MethodInfo methodRemove = typeSub.GetMethod("Remove");

// this method can find
MethodInfo methodRemove = typeSub.GetMethod("RemoveAt");

// there is no "Remove" method in the list
MethodInfo[] methodRemove = typeSub.GetMethods(); 

但是我找不到Remove方法,为什么?

4

1 回答 1

3
  • IList<T> defines RemoveAt(), but it doesn't define Remove().

  • IList<T> inherits from ICollection<T>, which defines Remove().

An example how to retrieve the correct MethodInfo:

Type typeWithRemove = typeSub.GetInterfaces ()
    .Where ( i => i.GetMethod ( "Remove" ) != null )
    .FirstOrDefault ();

if ( typeWithRemove != null )
{
    MethodInfo methodRemove = typeWithRemove.GetMethod ( "Remove" ); 
}
于 2012-07-26T06:27:05.050 回答