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());

NowindexersIEnumerable<MethodInfo>匹配指定BindingFlags给定的索引器的一个 getter bindingFlags

请注意代码是如何从 中读取的targetType,获取与 匹配的属性,获取bindingFlags作为索引器的属性,然后投影到 getter。它比使用魔术字符串要简单得多"get_Item",并且可以轻松处理多个索引器。

如果你知道只有一个,你当然可以使用Single. 如果您正在寻找众多中的特定之一,则可以GetIndexParameters相应地检查结果。

于 2011-02-10T00:25:14.230 回答
2

正确的方法是检索类的 DefaultItemAttribute。它具有索引器属性的名称。它不必是“项目”,像 VB.NET 这样的语言允许将任何属性指定为索引器。Jason 的代码也会在它们上失败,可能有多个索引属性。但只有一个默认值。

于 2011-02-10T06:55:26.017 回答