查找具有特定约束的泛型类的用法

时间:2016-03-08 09:04:27

标签: c# visual-studio

根据标题,如何找到Processor<int>而不是Processor<string> 过程方法的用法?

internal class Program
{
    private static void Main()
    {
        var processorInt = new Processor<int>();
        var processorString = new Processor<string>();

        processorInt.Process();
        processorString.Process();
    }
}

internal class Processor<T>
{
    public void Process() => Console.WriteLine(typeof(T).Name);
}

4 个答案:

答案 0 :(得分:2)

ReSharper可以开箱即用。如果您尝试搜索引用,它实际上会询问您要查找的内容。只需声明要查找的类型的虚拟变量,然后在类型名称上调用查找用法

Find Usages

请注意,这适用于泛型类和泛型方法,但如果您在具有给定类型参数的泛型类中查找方法的用法,它将无法帮助您。

Generic method example

或者只需使用右击 - &gt; 查找高级用法

Find Usages Advanced

答案 1 :(得分:1)

您无法使用标准工具。

你要么:

  1. Ctrl + K Ctrl + R 查找对Processor<T>的所有引用。
  2. 自己在Processor<int>上进行视觉过滤。
  3. 或者:

    Processor<int>上使用文字搜索查找所有内容。当你有SomeOtherProcessor<int>时,这也不是很有用,因为那样也会匹配。

    这是我提出的唯一选择。其他开发人员工具,如Resharper,可能有更好的选择。

答案 2 :(得分:0)

我担心实现此目的的唯一方法是直接在搜索和替换工具中搜索Processor<int>()。虽然相当讨厌。但是,如果您的泛型类具有泛型接口参数而不是结构或类,则这将不会对ypu有很大帮助。因此,如果您对使用该接口的泛型参数的所有Processor<MyInterface>()的出现感兴趣,则无法搜索Processor的用法。

答案 3 :(得分:0)

您可以使用我使用Roslyn API构建的工具:

https://github.com/UnoSD/SubTypeReferencesAnalysis