Оптимизированный способ получения" get Item " MethodInfo
Прямо сейчас у меня есть: targetType.GetMethod("get_Item", BindingFlags.Instance)
2 ответа:
Я предпочитаю использовать
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соответственно.
Правильный способ-получить атрибут DefaultItemAttribute для класса. Он имеет имя свойства индексатора. Это не обязательно должен быть "элемент", такие языки, как VB.NET позволяет указать любое свойство в качестве индексатора. Код Джейсона также потерпит неудачу на них, там может быть более одного индексированного свойства. Но только один дефолт.