您推荐哪些工具或技术,可以发现代码中的C#扩展方法? 它们在正确的命名空间中,但可能在解决方案的任何文件中。
具体来说:
- 如何在代码窗口中找到当前类型上的所有扩展方法(并导航至它们)?
我确实有Resharper(v4),所以如果它有我不知道的机制-请分享!
您推荐哪些工具或技术,可以发现代码中的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"怎么样?
int[]
数组的所有扩展方法,那么你可能需要搜索this object
、this T
、this T[]
、this int[]
、this ICloneable
、this IList
、this ICollection
、this IEnumerable
、this IList<T>
、this IList<int>
、this ICollection<T>
、this ICollection<int>
、this IEnumerable<T>
和this IEnumerable<int>
。(当然,也没有保证扩展方法的泛型类型参数实际上会被命名为T
而不是TFoo
或TBar
等等。) - LukeH如果您正在使用VS,我猜您会使用智能感知功能来显示给定对象的所有可用扩展方法(标有蓝色小图标添加到常规实例方法图标中)。该列表可能因文件而异(在两个不同的文件中,名为aMethod的方法可能意味着两个不同的东西),即使对象类型相同(这是基于查找扩展方法的方式)。