2

このコードはもちろん有効です。定義上、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");
4

4 に答える 4

2

のメンバーですIEnumerable

于 2010-12-15T06:08:49.643 に答える
2

型が宣言していないため、型をGetEnumerator見つけることができません。それを宣言するextends 。したがって、タイプを探すためにコードを変更する必要があります。IListIListGetEnumeratorIListIEnumerableGetEnumeratorIEnumerable

Type type = typeof(System.Collections.IEnumerable);
var member = type.GetMember("GetEnumerator");
于 2010-12-15T06:25:57.637 に答える
1

インターフェイスが実装しているインターフェイスのメンバーを検索できない理由がわかりません。ただし、この使用を回避するには、次のようにします。

var member = iListType.GetInterfaces().Union(new Type[] { iListType }).SelectMany(t => t.GetMember("GetEnumerator"));

コードはクラスタイプで機能しますが、インターフェイスタイプでは機能しません。それ、変だよ。で確認したところ、System.Collections.ArrayList1つのメソッドが返されました。

于 2010-12-15T06:33:52.923 に答える
0

BindingFlagsこの場合、設定する必要があるかもしれません。

これを試して...

MemberInfo[] member = iListType.GetMember("GetEnumerator", BindingFlags.Public);            
于 2010-12-15T06:13:54.857 に答える