C#:发现扩展方法

时间:2010-02-04 09:50:56

标签: c# visual-studio extension-methods

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

具体做法是:

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

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

4 个答案:

答案 0 :(得分:5)

如果您有源,那么您可以使用正则表达式搜索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) {
}

但这是正则表达式的限制。我确信certain somebodies可以告诉你所有关于使用正则表达式解析语言的痛苦。

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

答案 1 :(得分:1)

这是相当低技术的,但Ctrl-F如何搜索“this:b + MyClassName”?

答案 2 :(得分:0)

如果你正在使用VS,我猜你是intellisense将为你显示给定对象的所有可用扩展方法(标记为添加到通常实例方法图标的蓝色东西)。该列表可能因文件而异(一个名为aMethod的方法可能意味着在两个不同的文件中有两个不同的东西),尽管对象类型相同(基于找到扩展方法的方式)

答案 3 :(得分:0)

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