我有一个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>继承自ICollection<T>,后者定义了Remove()


如何获取正确的MethodInfo的示例:

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

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

关于c# - IList <T>似乎不包含方法“Remove”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11663556/

10-10 00:18