优化获取“get_Item”的方式方法信息
现在,我有: targetType.GetMethod("get_Item", BindingFlags.Instance)
有什么更好的吗?
Right now, I have: targetType.GetMethod("get_Item", BindingFlags.Instance)
Is there anything better?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我更喜欢使用
PropertyInfo.GetIndexParameters
:现在
indexers
是索引器的 getter 的IEnumerable
,它与中给出的指定
。BindingFlags
匹配>绑定标志请注意代码如何从
targetType
读取,获取与bindingFlags
匹配的属性,获取索引器的属性,然后投影到 getter。它比使用魔术字符串“get_Item”
要简单得多,并且可以轻松处理多个索引器。如果您知道只有一个,您当然可以使用
Single
。如果您正在查找众多参数中的特定一个,您可以相应地检查GetIndexParameters
的结果。I prefer to use
PropertyInfo.GetIndexParameters
:Now
indexers
is anIEnumerable<MethodInfo>
of the getters of the indexers that match the specifiedBindingFlags
given inbindingFlags
.Note how the code reads like from the
targetType
, get the properties that match thebindingFlags
, take those that are an indexer, and then project to the getter. It is much less mysterious than using the magic string"get_Item"
, and multiple indexers are handled easily.If you know there is only one, you could of course use
Single
. If you are looking for a specific one of many, you can inspect the result ofGetIndexParameters
accordingly.正确的方法是检索该类的 DefaultItemAttribute。它具有索引器属性的名称。它不必是“Item”,像 VB.NET 这样的语言允许指定任何属性作为索引器。 Jason 的代码也会失败,因为可能有多个索引属性。但只有一项默认。
The proper way is to retrieve the DefaultItemAttribute for the class. It has the name of the indexer property. It doesn't have to be "Item", languages like VB.NET allows specifying any property to be the indexer. Jason's code will also fail on them, there can be more than one indexed property. But only one default.