我有一个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" );
}