C#:发现扩展方法

Nei*_*ell 4 c# extension-methods visual-studio

您建议在代码中发现C#扩展方法的工具或技术是什么?它们位于正确的命名空间中,但可能位于解决方案中的任何文件中.

特别:

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

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

Igo*_*aka 5

如果您有源,那么您可以搜索this Type identifier使用正则表达式.考虑到它必须是函数的第一个参数这样的事实应该做的伎俩:

\(this:b+:i:b+:i
Run Code Online (Sandbox Code Playgroud)

至少通过这种方式,您可以发现扩展方法的定义位置并添加该命名空间,然后依赖智能感知.只是在一个非常简单的项目上运行它,在任何地方都有很多扩展方法,这是一种享受.唯一的误报是这样的:

if(this is Blah...
Run Code Online (Sandbox Code Playgroud)

我们可以通过添加static到我们的搜索来修复,因为扩展方法必须是静态的:

static.*\(this:b+:i:b+:i
Run Code Online (Sandbox Code Playgroud)

这不适用于这样的情况:

public
  static ExtensionMethod(
   this int
    iVal) {
}
Run Code Online (Sandbox Code Playgroud)

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

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