繁体   English   中英

C#:发现扩展方法

[英]C#: Discovering Extension Methods

您推荐哪些工具或技术来发现代码中的 C# 扩展方法? 它们位于正确的命名空间中,但可能位于解决方案中的任何文件中。

具体来说:

  • 如何在代码窗口中找到当前类型的所有扩展方法(并导航到它们)?

我确实有 Resharper (v4),所以如果它有我不知道的机制 - 请分享!

如果您有来源,那么您可以使用正则表达式搜索this Type identifier 考虑到它必须是函数的第一个参数,这样的事情应该可以解决问题:

\(this:b+:i:b+:i

至少通过这种方式,您可以发现扩展方法的定义位置并添加该命名空间,然后依赖智能感知。 只是在一个不平凡的项目上运行了这个,到处都有很多扩展方法,而且效果很好。 唯一的误报是这样的:

if(this is Blah...

我们可以通过在搜索中添加static来解决这个问题,因为扩展方法必须是静态的:

static.*\(this:b+:i:b+:i

这不适用于以下情况:

public
  static ExtensionMethod(
   this int
    iVal) {
}

但这是正则表达式的一种限制。 我相信某些人可以告诉你所有关于使用正则表达式解析语言的痛苦。

现在,我认为 IDE 缺少的是识别非导入命名空间中的扩展方法的能力。 与您知道类名类似,如果您键入它,IDE 会提示您显式使用它或导入命名空间。 毕竟,这就是我导入所有命名空间的方式,并且经常发现自己试图对扩展方法做同样的事情。

这是相当低技术的,但是 Ctrl-F 搜索 "this:b+MyClassName" 怎么样?

如果您使用的是我猜您是智能感知的 VS,它将为您显示给定对象的所有可用扩展方法(标有添加到通常实例方法图标中的蓝色事物)。 该列表可能因文件而异(称为 aMethod 的方法可能意味着两个不同文件中的两个不同事物),即使对象类型相同(这取决于找到扩展方法的方式)

如果您有 resharper,只需按住 ctrl 键并单击该方法。

如果您在 Visual Studio 中安装了 ILSpy 扩展(我使用的是 2022),那么您可以:

  • 右键单击类/类型并选择 -> 在 ILSpy 中打开代码
  • 在 ILSpy 中右键单击类型并选择 -> 分析
  • 在分析窗口中,您将看到一个节点“扩展方法”(如果存在,则不显示任何节点)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM