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