Visual Studio C#语句折叠

Visual Studio C# statement collapsing

当编辑非常长的代码块(无论如何都应该重构,但这超出了这个问题的范围)时,我经常渴望能够像折叠函数块那样折叠语句块。也就是说,如果负号图标出现在用大括号括起来的代码大纲上,那就太好了。它似乎适用于函数、类、区域、名称空间、using,但不适用于条件块或迭代块。如果我能把像ifs、switches、foreaches这样的东西折叠起来,那就太棒了!

Google进入一点,我发现显然在VS中的C++概述允许这一点,但是C在VS中的概述没有。我不知道为什么。如果我选择C格式,即使是记事本++也会折叠,所以我不明白为什么Visual Studio不这样做。

是否有人知道将启用此行为的VS2008外接程序?或者某种隐藏的设置?

编辑添加:插入区域当然是一个选项,我已经想到了,但坦白地说,我不应该在已经用大括号包装的区域中包装东西…如果我要编辑现有的代码,我只需重构它,以便更好地分离关注点。(用新方法而不是区域包装;)

  • 顺便说一句:我发现这两个快捷方式让我的生活非常简单:切换大纲:ctrl+m,m折叠全部:ctrl+m,o
  • ctrl+m,l切换递归折叠/展开。当然,这会给你留下一行。在这行中,尽管(ctrl+m,m)会给您留下一个很好的摘要文件。
  • 这里有一个与之相当的Vs2012插件:stackoverflow.com/questions/18388280/…
  • 相关:Jeff Atwood的代码折叠问题,2008年


从Visual Studio 2017开始,语句折叠是内置的。

从Vs2010版本开始,有几个扩展对Vs2017之前的版本执行此任务:

  • C大纲
  • C大纲2012年(@msdn)
  • C大纲2013年(@msdn)
  • C大纲2015年(@msdn)
  • Visual Basic和C大纲视图

最后一个扩展只支持vs 2015和vs 2017,但它是最强大的。它支持折叠块内的语法着色,更具容错性和优化性。

If the extension doesn't seem to install after you used a browser to download it, try using the built-in Visual Studio extension manager.

  • 太好了,我已经找了这么久了。应该是真正的答案!(但只有当你使用VS2010非特快版时,我想…)
  • 此扩展非常好,但不适用于处理程序(.ashx)
  • Ctrl M + O不再工作。我怎么修这个?
  • 以下是vs 2013版本:
  • 事实上,我们甚至需要这个插件为Visual Studio是令人难以置信的。这应该是标准行为。天哪。
  • 不适用于VS Express 2013
  • @Odys,卸载并重新安装扩展以修复ctrl m+o问题。
  • @Odys,请参见扩展页面(visualtudiogallery.msdn.microsoft.com/…)中的问答部分。
  • 它适用于Visual Basic吗?
  • @PeterPitlock没有,但是你可以试试这个:VisualBasic和C大纲视图
  • 与2017年相比,是否有这样的设置?我看起来又高又低,好像找不到。


我不知道加载项,但您提到了区域,我认为这样做没有什么错…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
foreach (Item i in Items)
{
  #region something big happening here
  ...
  #endregion

  #region something big happening here too
  ...
  #endregion

  #region something big happening here also
  ...
  #endregion
}

编辑:回答问题的编辑:你是对的,在任何地方粘贴一堆区域都不理想,重构可能是解决问题的方法。但你似乎在寻找一种神奇的东西来为你"组织"代码,我认为这并不存在。

  • IIRC,不能在函数中定义区域。
  • 他的代码是正确的;您不局限于这样定义区域的位置(只要您不在开始的范围之外结束)
  • @约翰是对的
  • 请参见原始问题的编辑;开发人员需要的手动操作(即使使用一个或两个单击区域包装快捷方式)并不能真正回答自动完成此操作的问题/愿望。
  • @乔尔,我相信你在想vb.net
  • 你在这个线程中发现链接的所有插件都比使用区域要好。夜以继日。
  • 我偶尔使用一次区域,它们是有用的。我只是希望vs把它们变成绿色(像注释),这样它们就可以更突出(当块未折叠时)。


可以折叠Visual Studio中的特定文本块,但必须关闭自动大纲显示。

在代码窗口中单击鼠标右键并选择(大纲显示停止大纲显示)

然后,选择一些文本,右键单击并选择(大纲隐藏选择)

再次启用自动大纲显示时,自定义"区域"将不再折叠。

  • 很公平。不过,我希望通过这个问题找到一种将这些块添加到自动大纲中的方法,因为这样做对它们没有真正意义。
  • 马特,你可以在不停止自动大纲显示的情况下完成它(在vs 2012中)。只需选择文本和大纲>隐藏所选内容


让我说些不同的话:按cx1〔0〕或在编辑>大纲>隐藏选择中它很有用。

  • 这并不能回答这个问题。要评论或要求作者澄清,请在他们的帖子下面留下评论-你可以随时对自己的帖子发表评论,一旦你有足够的声誉,你就可以对任何帖子发表评论。
  • 你能告诉我我的答案有什么问题吗?
  • @Mahdi的问题是关于将要崩溃代码块的工具。您单击一些组合,您的ifs、for/while循环等都将折叠,以便您可以在尽可能高的级别读取代码。然后您将深入了解代码。您的解决方案是不可行的,因为您必须首先折叠所有区域,而您看不到具体是哪个区域。祝你将来好运。
  • 你可以先发表评论,然后隐藏在下面,这样更容易和灵活


只要将函数保持在同一代码层次级别,Visual Studio 2008就支持函数内部的区域。

1
2
3
4
5
6
7
8
9
10
11
12
13
#region Won't work
for(int i = 0; i<Count; i++)
{
//do something
#endregion
}

for(int i=0; i<Count; i++)
{
#region Works fine
//do lots of stuff
#endregion
}

  • 这在2008年并不新鲜。2005年也支持它。


此功能已添加到Visual Studio 2010的C编辑器中。我找不到验证它是否真的被放入的源代码,但我记得在Dev10团队成员的一个博客上看到过它,讨论自beta 1以来的变化或其他什么。作为安慰,这里有一条微软的评论建议他们添加它。


在VS2017中,您可以突出显示代码的一部分,右键单击,大纲>隐藏选择。这将折叠代码并为突出显示的部分提供切换。


我在Visual Studio 2013中找到了它,并发现它非常有用。即使用在代码周围加上简单的大括号,它也能工作。}

分享之后,我发现有人也提到了这个链接。我也支持这个工具。

C Visual Studio 2013大纲工具


coderush将为您概述所有代码块。不确定它是否允许您展开/折叠块,但大纲显示是下一个最好的方法。我使用resharper而不是coderush,据我所知,它也不提供块崩溃:(


我将在这里补充一点,在Vs2010中,微软已经使用托管扩展框架(mef)添加了wpf修饰器功能,这将允许我们扩展源代码编辑器,以更好的方式组织它们,使之更易于阅读和访问。

例如,ScottGu在2008年的pdc上演示的总结评论可视化工具。

因此,希望开发人员有一个更好的明天:)


#区域,结束区域是智能选项。

  • StyleCop规则SA1123:DonotPlaceRegionsWithineElements:每当将区域放置在代码元素的主体中时,就会发生违反此规则的情况。在许多编辑器(包括Visual Studio)中,默认情况下,该区域将显示为折叠的,从而将代码隐藏在该区域中。将代码隐藏在元素体中通常是一种糟糕的做法,因为随着时间的推移,这可能会导致错误的决策。