优化获取“get_Item”的方式方法信息

发布于 2024-10-17 05:57:41 字数 99 浏览 3 评论 0原文

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

有什么更好的吗?

Right now, I have: targetType.GetMethod("get_Item", BindingFlags.Instance)

Is there anything better?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不忘初心 2024-10-24 05:57:41

我更喜欢使用 PropertyInfo.GetIndexParameters

var indexers = targetType.GetProperties(bindingFlags)
                         .Where(p => p.GetIndexParameters().Any());
                         .Select(p => p.GetGetMethod());

现在 indexers 是索引器的 getter 的 IEnumerable,它与 中给出的指定 BindingFlags 匹配>绑定标志

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

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

I prefer to use PropertyInfo.GetIndexParameters:

var indexers = targetType.GetProperties(bindingFlags)
                         .Where(p => p.GetIndexParameters().Any());
                         .Select(p => p.GetGetMethod());

Now indexers is an IEnumerable<MethodInfo> of the getters of the indexers that match the specified BindingFlags given in bindingFlags.

Note how the code reads like from the targetType, get the properties that match the bindingFlags, 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 of GetIndexParameters accordingly.

思念满溢 2024-10-24 05:57:41

正确的方法是检索该类的 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文