这个代码当然是有效的。根据定义,IList 有一个 GetEnumerator() 方法。
System.Collections.IList list = new List<string>();
System.Collections.IEnumerator ienum = list.GetEnumerator();
但是,以下方法都无法找到名为 GetEnumerator 的 IList 类型的成员。
Type iListType= typeof(System.Collections.IList);
var member = iListType.GetMember("GetEnumerator");
var members = iListType.GetMembers().Where(x => x.Name == "GetEnumerator");
var method = iListType.GetMethod("GetEnumerator");
var methods = iListType.GetMethods().Where(x => x.Name == "GetEnumerator");
最佳答案
在 IList
类型上找不到 GetEnumerator
,因为 IList
类型未声明 GetEnumerator
。 IList
扩展了声明它的 IEnumerable
。因此,您需要更改代码以在 IEnumerable
类型上查找 GetEnumerator
。
Type type = typeof(System.Collections.IEnumerable);
var member = type.GetMember("GetEnumerator");
关于c# - 为什么通过反射找不到IList类型上的GetEnumerator()方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4447163/