IList<T> 似乎不包含该方法"Remove"



我有一个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方法,为什么?

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

  • IList<T>继承了定义Remove()ICollection<T>

如何检索正确的MethodInfo:的示例

Type typeWithRemove = typeSub.GetInterfaces ()
    .Where ( i => i.GetMethod ( "Remove" ) != null )
    .FirstOrDefault ();
if ( typeWithRemove != null )
{
    MethodInfo methodRemove = typeWithRemove.GetMethod ( "Remove" ); 
}

相关内容

最新更新