[英]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),那么您可以:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.