Visual Studio查找所有引用忽略var

问题描述 投票:3回答:1

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

有什么方法可以解决这个问题吗?

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

SHIFT+F12

结果是。

enter image description here

但是当在1197行使用ReportWindow时,enter image description here

我得到了我想要的东西

enter image description here

c# visual-studio visual-studio-2015
1个回答
1
投票

在这个时间点上,VS 2015、2017和2019都有这样的行为,对于内置的 查找所有参考资料 搜索,以及Resharper的。查找用途查找用途 高级 搜索选项。这也是预期行为。

只有在 var 引用会在搜索结果中被返回是当你对构造函数进行显式调用时。另外,当调用一个方法并返回到已明确声明为给定类型的变量时,这一行也会在搜索结果中返回。

就个人而言,我喜欢使用 var 只有在很明显的情况下才会返回和分配给一个变量,通常只有在直接调用构造函数的时候才会出现这种情况。当声明一个名字很长很不方便的类时,这也很方便,避免了必须要用 该型 两次。

Dictionary<string, Ninja> trainees = new Dictionary<string, Ninja>();

这里是一个小程序的例子,展示了在哪里 查找所有参考资料 会找到结果,在哪里不会。

using System;
​
namespace VarSearchTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var ninja = NinjaAcademy.Train();     // <---------- does not find (implicit)
            Ninja ninja2 = NinjaAcademy.Train();  // <---------- finds (explicit type declaration)
            var chrisFarley = new Ninja();        // <---------- finds (explicit constructor call)


            Console.WriteLine(ninja.Hide());
            Console.WriteLine(ninja2.Hide());
            Console.WriteLine(chrisFarley.Hide());
        }
    }
​
    public class Ninja  // <-------------------- Find all references/usages
    {
        public string Hide()
        {
            return "Puff of smoke...";
        }
    }
​
    public static class NinjaAcademy
    {
        public static Ninja Train()  // <---------------- finds (explicit return type)
        {
            return new Ninja();      // <------------------ finds (explicit constructor call)
        }
    }
}

您还可以跟踪 这个github问题 以防将来发生变化,因为这样可以方便地找到隐式引用。同时,可以考虑使用 var 只有在显性情况下提供方便的场景下,才会出现。

© www.soinside.com 2019 - 2024. All rights reserved.