6

今、私は持っています:targetType.GetMethod("get_Item", BindingFlags.Instance)

もっと良いものはありますか?

4

2 に答える 2

6

私は使用することを好みますPropertyInfo.GetIndexParameters

var indexers = targetType.GetProperties(bindingFlags)
                         .Where(p => p.GetIndexParameters().Any());
                         .Select(p => p.GetGetMethod());

現在indexersは、指定された にIEnumerable<MethodInfo>一致するインデクサーのゲッターのです。BindingFlagsbindingFlags

コードが からどのように読み取られ、targetTypeに一致するプロパティを取得しbindingFlags、インデクサーであるプロパティを取得してから、ゲッターに投影するかに注目してください。マジック ストリングを使用するよりもはるかに謎が少なく"get_Item"、複数のインデクサーを簡単に処理できます。

1 つしかないことがわかっている場合は、もちろん を使用できますSingle。多くの中から特定のものを探している場合は、それにGetIndexParameters応じて結果を調べることができます。

于 2011-02-10T00:25:14.230 に答える
2

適切な方法は、クラスのDefaultItemAttributeを取得することです。インデクサープロパティの名前が付いています。「アイテム」である必要はありません。VB.NETのような言語では、任意のプロパティをインデクサーとして指定できます。Jasonのコードも失敗します。複数のインデックス付きプロパティが存在する可能性があります。ただし、デフォルトは1つだけです。

于 2011-02-10T06:55:26.017 に答える