在Visual Studio中,有没有办法按用法对私有方法进行排序?

Yac*_*sad 26 c# refactoring visual-studio

在Visual Studio中,有或没有扩展,有没有办法根据用法的顺序(它们在调用堆栈中的位置)自动对类中的私有方法进行排序?

例如,考虑以下类:

public class MyClass
{
    public void MyMethod()
    {
        TestC();
    }

    private void TestA()
    {
        TestB();
    }

    private void TestB()
    {
        Console.WriteLine("Hello");
    }

    private void TestC()
    {
        TestA();
    }
}
Run Code Online (Sandbox Code Playgroud)

这个类中的公共方法是MyMethod,它调用TestC哪个调用TestA哪个调用TestB.我想(自动)按此顺序对这些方法进行排序,以便类看起来像这样:

public class MyClass
{
    public void MyMethod()
    {
        TestC();
    }

    private void TestC()
    {
        TestA();
    }

    private void TestA()
    {
        TestB();
    }

    private void TestB()
    {
        Console.WriteLine("Hello");
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要能够选择一个类,请求这样的方法排序,并让方法自动排序.即,我不想手动对这些方法进行排序.

我知道有一些细微差别.例如,可能存在从两个方法调用的私有方法,这两个方法在调用堆栈中处于两个不同的级别.我想在这种情况下考虑与公共方法的最小(调用堆栈)距离是有意义的.

更新:

这种以这种方式对方法进行分类的想法来自Robert C. Martin的清洁代码书.在第3章中,定义了Stepdown规则,该规则讨论了在低级函数之前出现更高级别的函数.

在google上快速搜索stepdown规则,我发现了一个netbeans插件:http://plugins.netbeans.org/plugin/58863/stepdownruleplugin

我猜它会像我需要的那样,但对于netbeans.

Den*_*s K 11

ReSharper插件"Greenkeeper"完成了这项工作:

https://bitbucket.org/denniskniep/greenkeeper

该插件可以对"newspapermode"中的方法进行排序:首先是重要代码,在底部是详细信息.newspapermode具有与"Stepdown rule"相同的行为.

https://bitbucket.org/denniskniep/greenkeeper/wiki/SortingDeclarations


Bri*_*ian 9

我不知道是否可以在Visual Studio中本地执行此操作.但是,我认为最好的方法是使用ReSharper(Visual Studio扩展)来执行此操作.

它提供了至少两个可以想到的选项:

1)使用带有模式的文件和类型布局首选项,

2)使用"文件结构"窗口(如果要重新排序的类没有太多方法,这可能是最快的方法).你可以在这里查看.

希望有所帮助.

  • 我真的无法理解你的答案.你说你不知道这样做的扩展,但是你提供了一些选择.这些选项有哪些? (2认同)

Jer*_*son 9

以下是没有人引用的其他产品可以通过友好的请求添加功能:

自己写这个并不难.VS2015设置中提供了新的Visual Studio VSIX项目模板,如果您无法在(文件>新建>项目... Visual C#>可扩展性)下找到它们,只需修改安装(cmd> appwiz.cpl> VS2015更改/修改).

好消息是CodeMaid项目是开源的,包含重新排序代码块所需的大部分代码和逻辑.

你需要的另一件事是调用堆栈,我们的一个有用的伙伴Stackoverflow'rs为此提供了代码:如何从Visual Studio外接程序中获取正在运行的进程的堆栈跟踪?

鉴于这是一个赏金,你可能期待一个完整的解决方案,抱歉,我没有时间为你编写代码,但如果你遇到任何问题我很乐意帮助你.请在评论中告诉我.

为了快速启动和运行,我个人只需复制此Visual Studio扩展中的代码,并通过调用堆栈重新排序替换内核:调试单线程.