Я предпочитаю использовать PropertyInfo.GetIndexParameters
:
var indexers = targetType.GetProperties(bindingFlags)
.Where(p => p.GetIndexParameters().Any());
.Select(p => p.GetGetMethod());
Теперь indexers
- это IEnumerable<MethodInfo>
получателей индексаторов, которые соответствуют указанному BindingFlags
, указанному вbindingFlags
.
Обратите внимание, как код читается как из targetType
, получите свойства, соответствующие bindingFlags
, возьмите те, которые являются индексатором, и затем спроецируйте на получатель.Это гораздо менее таинственно, чем использование магической строки "get_Item"
, и с несколькими индексаторами легко справиться.
Если вы знаете, что есть только один, вы, конечно, можете использовать Single
.Если вы ищете конкретный из многих, вы можете проверить результат GetIndexParameters
соответственно.