2012-07-26 48 views
2

我有MyClass的实例,其定义为:的IList <T>似乎并没有包含方法“删除”

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方法,为什么?

回答

3
  • IList<T>定义RemoveAt(),但它并没有定义Remove()

  • IList<T>继承自ICollection<T>,其定义为Remove()

一个例子如何获取正确的MethodInfo

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

if (typeWithRemove != null) 
{ 
    MethodInfo methodRemove = typeWithRemove.GetMethod ("Remove"); 
} 
相关问题