C# 如何在源代码中找到具有特定类型参数的泛型调用?

C# 如何在源代码中找到具有特定类型参数的泛型调用?,c#,visual-studio-2010,resharper,C#,Visual Studio 2010,Resharper,我有一个通用方法 public void Foo<T>(T arg) where T : ISomeInterface public void Foo(T arg),其中T:interface 这个方法在整个代码中被大量使用,我想知道它在哪里被使用,T是一个特定的类型 我可以用文字搜索 "Foo<TheType>(" “Foo(” 但大多数情况下,类型参数在调用中被忽略(推断)。 有什么方法可以在VS2010或ReSharper中找到这些方法调用吗?如您所述,您可

我有一个通用方法

public void Foo<T>(T arg) where T : ISomeInterface
public void Foo(T arg),其中T:interface
这个方法在整个代码中被大量使用,我想知道它在哪里被使用,T是一个特定的类型

我可以用文字搜索

"Foo<TheType>("
“Foo(”
但大多数情况下,类型参数在调用中被忽略(推断)。
有什么方法可以在VS2010或ReSharper中找到这些方法调用吗?

如您所述,您可以使用文本搜索“
Foo(
”和“
Foo(类型
”)在推断出的情况下

通过ildasm运行程序集并搜索适当的方法签名,然后通过反汇编反向工作以获取源文件和行号。

在下一版本的ReSharper中,“使用模式搜索”功能将涵盖这一点。

您可以让编译器帮助您使用旧的break-it找到它们,并查看什么是不可编译的方法:如果所讨论的类型t是您自己的代码,请尝试更改其定义,使其不再实现ISomeInterface。

我尝试了以下ReSharper搜索模式(ReSharper->Tools->PatternCatalog->Add pattern):

搜索模式:Foo($arg$)
占位符:arg=类型为的表达式


然后保存它并单击“立即搜索”。

临时声明非泛型方法并查找其用法

public void Foo(TheType arg)
{
}

声明之后,它是首选方法,而不是泛型。

也许我不清楚:有数百种不同的类型作为t传递,大多数情况下可以推断它是什么类型。我想找到t是一种特定类型的调用。这很有效。另一方面,我已经有了一个FxCop规则,可以告诉我这些调用的位置。我只是好奇我是否能比那更快/更简单(即,直接在源代码中)。JetBrains的评论表明这目前不可用。在我看来,结构搜索和替换应该能够做到,但我似乎无法让它工作。它工作了吗?什么版本的ReSharper?它是“下一个”吗Evgeny在回答中提到的版本?我目前只有R#5.1。