我有一个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/