获得“get_Item”MethodInfo的优化方法

时间:2011-02-10 00:18:12

标签: c# reflection items methodinfo

现在,我有:targetType.GetMethod("get_Item", BindingFlags.Instance)

有什么更好的吗?

2 个答案:

答案 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这样的语言允许指定任何属性作为索引器。杰森的代码也会失败,可能会有多个索引属性。但只有一个默认值。