现在,我有:targetType.GetMethod("get_Item", BindingFlags.Instance)
有什么更好的吗?
答案 0 :(得分:6)
我更喜欢使用PropertyInfo.GetIndexParameters
:
var indexers = targetType.GetProperties(bindingFlags)
.Where(p => p.GetIndexParameters().Any());
.Select(p => p.GetGetMethod());
现在indexers
是与IEnumerable<MethodInfo>
中指定的BindingFlags
匹配的索引器的getter bindingFlags
。
注意代码如何从targetType
读取,获取与bindingFlags
匹配的属性,将那些作为索引器,然后投影到getter。它比使用魔术字符串"get_Item"
要神秘得多,并且可以轻松处理多个索引器。
如果你知道只有一个,你当然可以使用Single
。如果您正在寻找特定的一个,您可以相应地检查GetIndexParameters
的结果。
答案 1 :(得分:2)
正确的方法是检索类的DefaultItemAttribute。它具有索引器属性的名称。它不必是“Item”,像VB.NET这样的语言允许指定任何属性作为索引器。杰森的代码也会失败,可能会有多个索引属性。但只有一个默认值。