在Visual Studio中检查使用指令参考

4

EDIT3: 为方便以后参考,感谢 BahJiy 修改了问题描述。

是否有类似于“查找用法”的Visual Studio(或ReSharper)命令,可以从使用指令中查找类的用法?


“查找用法”只显示命名空间本身的引用(因此像下面的截图一样,“唯一的用法”)。

Find Usages on using directive returns "This is the only usage"

当我像下面这样注释掉using System.Reactive.Linq行时,Observable会指示它在当前上下文中不存在错误。

enter image description here

可以注释掉using指令并检查上述错误,但是否有比逐个检查错误更好的方法?


答案:查找用法确实可以做到,光标位置很重要

如下面答案评论中所述,光标位置需要在using处,而不是命名空间处。

enter image description here



旧问题描述
是否有Visual Studio(或ReSharper)命令,可以告诉我哪些方法来自于using SomeNamespace.SomeClass在使用文件中定义的SomeNamespace.SomeClass

当我遇到一些意外的命名空间时,我想检查使用情况。
“查找用法”或“所有引用”在使用指令上只显示其他指令。

我可以删除具体的using指令并检查文件中的错误,但我必须忽略更好的方法...


EDIT + EDIT2:
一个例子可能有助于更好地阐明情况。

SomeClass.cs

namespace SomeNamespace {
    public static class SomeClass {
        public static string SomeExtensionMethod(this string s){
            // some implementation
        }
        /*
            More extension methods
        */
    }
}

Consumer.cs

using SomeNamespace.SomeClass

namespace OtherNamespace {
    public class Consumer {
        public void Consume(){
            string id = "someid";
            string after = id.SomeExtensionMethod;
        }
        /*
            More extension methods from SomeClass used
        */
    }
}

问题是,当我发现一些Consumer使用了using SomeNamespace.SomeClass时,如何最好地检查底层方法的使用情况呢?
是否有类似于“查找用法”命令的命令,以获取所有来自SomeNamespace.SomeClass的方法在Consumer类中的使用情况?


所有的 Visual Studio 都有这个功能,只需将鼠标指向该方法,您就会知道该方法属于哪个类。 - JC Borlagdan
实际上你可以这样做。如果它是一个dll文件,你可以在解决方案资源管理器中检查,在引用下双击它,它会显示该指令下的所有方法。 - JC Borlagdan
例如,使用System;,您可以在引用中看到有System库,双击它,然后您将看到在using system下有哪些方法。 - JC Borlagdan
我认为你没有理解我的问题 - 我想知道在文件中使用指令的确切用例。我知道 SomeClass 下的方法以及如何使用对象编辑器,因此会质疑它是否在意料之外的类中使用。 - Ryota
你的意思是在 SomeClass 类中有一个嵌套类 RandomClass 吗? - JC Borlagdan
显示剩余3条评论
2个回答

0

你想知道是否需要导入一个命名空间,因为该命名空间中的类型被使用了吗?如果是这样,请查看插件“Productivity power tools”,例如,有一个选项可以在保存时删除和排序using语句。


是的,有点儿。我确实使用了生产力工具,它让我的工作非常愉快。但我想要的并不完全是它所提供的功能——我知道 using 语句肯定被使用了,因此不能删除,但我无法快速查看它在哪个文件中被使用。 - Ryota

0
通常只需检查您的使用情况。Visual Studio仅允许从一个命名空间调用方法/类。如果您正在使用的多个命名空间中有两个或更多同名方法,则Visual Studio将强制您在调用中指定命名空间说明。
例如:
using Name1;
using Name2;

namespace Class1 {
    class Testing {
        public Testing {
            // this method only exists in Name1
            Method1 ( );
            // this method exist in both Name1 and Name2
            Name1.Method2 ( );
            Name2.Method2 ( );
        }
    }
}

所以如果你只看到了

using SomeNamespace;

如果你了解,任何可能来自该命名空间的类都是来自SomeNamespace。

如果有另一个同名的类,但在不同的命名空间中,Visual Studio将强制您在调用时键入该命名空间。

因此,如果您发现您的使用是正常的,并且没有随机的

RandomNamespace.Class1 class1 = new RandomNamespace.Class1 ( );

你肯定知道没有什么不寻常的。


如果问题不清楚,我很抱歉。我不是在谈论同名的多个方法,也不是关于类或方法的任何实现。为了更好地解释我的问题,我想了解特定类SomeNamespace.SomeClass的用例,这个类恰好出现在我队友编写的其他代码中。如果该类定义了数十个方法,那么进行大规模重构工作将变得更加麻烦。希望这样能更好地澄清我的问题。 - Ryota
我觉得我有点理解你的问题。我认为这可能会有所帮助。 - BahJiy
1
它基本上是说将光标放在您想要查找引用的using语句上,然后使用Find Usage。 - BahJiy
谢谢您的评论和参考资料,这个问题对我很有帮助,因为我正在寻找类似的功能。同时,正如评论中提到的那样,似乎没有其他容易的方法来检查实际的方法调用,而不是使用指令。(查找用法只列出使用指令。) - Ryota
我误读了你的评论,它正是我所需要的 - 非常感谢你的帮助!(问题已经重写并附有截图,以使问答更加清晰) - Ryota

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接