Visual Studio 查找所有引用忽略 var

Mat*_* K. 5 c# visual-studio visual-studio-2015

我想在 Visual Studio 中找到对某个类的所有引用,但忽略了用 var 定义的实例。

有没有办法解决这个问题?

这里我使用 SHIFT+F12 来获取引用

Shift+F12

结果是:

在此处输入图片说明

但是在第 1197 行使用 ReportWindow 时: 在此处输入图片说明

我得到我想要的

在此处输入图片说明

Jas*_*own 3

目前,VS 2015、2017 和 2019 对于内置的“查找所有引用”搜索以及 Resharper 的“查找用法”“查找用法高级”搜索选项具有此行为。这也是预期的行为。

\n\n

搜索结果中唯一var返回引用的是当您显式调用构造函数时。此外,当调用方法并返回到已显式声明为给定类型的变量时,该行也将在搜索结果中返回。

\n\n

var就我个人而言,我喜欢仅在明显返回并分配给变量的内容时才使用,这通常仅在直接调用构造函数时才使用。当声明一个具有长且不方便的名称的类时,这也很方便,避免必须键入该类型两次:

\n\n
Dictionary<string, Ninja> trainees = new Dictionary<string, Ninja>();\n
Run Code Online (Sandbox Code Playgroud)\n\n

下面是一个小程序示例,演示了“查找所有引用”在哪里可以找到结果,在哪里不能找到结果。

\n\n
using System;\n\xe2\x80\x8b\nnamespace VarSearchTest\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            var ninja = NinjaAcademy.Train();     // <---------- does not find (implicit)\n            Ninja ninja2 = NinjaAcademy.Train();  // <---------- finds (explicit type declaration)\n            var chrisFarley = new Ninja();        // <---------- finds (explicit constructor call)\n\n\n            Console.WriteLine(ninja.Hide());\n            Console.WriteLine(ninja2.Hide());\n            Console.WriteLine(chrisFarley.Hide());\n        }\n    }\n\xe2\x80\x8b\n    public class Ninja  // <-------------------- Find all references/usages\n    {\n        public string Hide()\n        {\n            return "Puff of smoke...";\n        }\n    }\n\xe2\x80\x8b\n    public static class NinjaAcademy\n    {\n        public static Ninja Train()  // <---------------- finds (explicit return type)\n        {\n            return new Ninja();      // <------------------ finds (explicit constructor call)\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您还可以跟踪此 github 问题,以防将来发生变化,因为易于查找隐式引用会很方便。同时,考虑var仅在显式情况下提供便利的场景中使用。

\n