Visual Studio C# 语句崩溃

Posted

技术标签:

【中文标题】Visual Studio C# 语句崩溃【英文标题】:Visual Studio C# statement collapsing 【发布时间】:2010-09-22 01:47:40 【问题描述】:

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

谷歌搜索了一下,我发现显然 VS 中的 C++ 大纲允许这样做,但 VS 中的 C# 大纲不允许。我真的不明白为什么。如果我选择 C# 格式,即使记事本++也会崩溃,所以我不明白为什么 Visual Studio 不这样做。

有谁知道可以启用此行为的 VS2008 插件吗?还是某种隐藏的设置?

编辑添加:插入区域当然是一个选项,它确实已经发生在我身上,但坦率地说,我不应该将东西包裹在已经包裹在大括号中的区域中......如果我要去要编辑现有代码,我只会重构它以更好地分离关注点。 (用新方法而不是区域“包装”;)

【问题讨论】:

顺便说一句:我发现这两个快捷键让我的生活变得非常轻松: 切换大纲:Ctrl + M,M 全部折叠:Ctrl + M,O Ctrl + M, L 切换递归折叠/展开。当然,这会让你只剩下一行。在那一行里面,虽然 (Ctrl + M, M) 给你留下了一个很好的总结文件。 这是 VS 2012 的等效插件:***.com/questions/18388280/… 相关:The Problem With Code Folding Jeff Atwood,2008 年 【参考方案1】:

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

从 VS 2010 版本开始,有几个扩展可以为 2017 之前的 VS 版本执行此任务:

C# outline C# outline 2012 (@MSDN) C# outline 2013 (@MSDN) C# outline 2015 (@MSDN) Visual Basic and C# Outliner

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

如果您使用浏览器下载扩展后似乎没有安装,请尝试使用内置的 Visual Studio 扩展管理器。

【讨论】:

太棒了,我一直在寻找这样的东西。应该是真正的答案! (但前提是你用的是VS2010非快递版,我猜……) 这个扩展很棒,但它不适用于处理程序 (.ashx) Here's the VS 2013 version: 我们甚至需要这个 Visual Studio 插件的事实令人难以置信。这应该是标准行为。天哪。 @Odys,卸载并重新安装扩展以修复 Ctrl M+O 问题。【参考方案2】:

我不知道加载项,但你提到了区域,我认为这样做没有错...

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,你不能在函数中定义区域。 他的代码是正确的;你不限于在哪里可以定义这样的区域(只要你没有超出开始的范围) 请看原问题的编辑;开发人员所需的手动操作(即使使用一两次单击区域包装快捷方式)并不能真正回答自动完成此操作的问题/愿望 @Joel 我相信你在考虑 VB.NET 你在这个线程中找到的所有插件都比使用区域更好。日日夜夜。【参考方案3】:

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

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

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

当您再次打开自动大纲时,您的自定义“区域”将不再折叠。

【讨论】:

很公平。我希望通过这个问题找到一种将这些块添加到自动大纲中的方法,因为它们没有意义。 Matt,你可以做到(在 VS 2012 中)而无需停止自动大纲。只需选择文本,然后大纲>隐藏选择【参考方案4】:

Visual Studio 2008 支持函数内部的区域,只要您将它们保持在相同的代码层次结构中

#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 年也支持它。【参考方案5】:

让我说点不同的:按(ctrl+m,ctrl+h) 或在编辑>大纲>隐藏选择 太有用了。

【讨论】:

@Mahdi 问题是关于将折叠代码块的工具。你点击一些组合,你的 ifs、for/while 循环等都被折叠起来,这样你就可以尽可能地阅读你的代码。然后你会更深入地研究代码。您的解决方案不可行,因为您必须首先折叠所有区域并且您看不到它到底是哪个区域。祝你未来好运。 你可以先评论一些东西然后隐藏在下面这样更容易和灵活【参考方案6】:

此功能已添加到 Visual Studio 2010 的 C# 编辑器中。我找不到验证它实际被放入的来源,但我记得在 Dev 10 团队成员的博客之一上看到它谈论自 Beta 1 或其他东西以来的变化。 As a consolation, here's one Microsoft comment suggesting they wanted to add it.

【讨论】:

【参考方案7】:

我将在这里补充一点,在 VS 2010 中,Microsoft 使用托管扩展框架 (MEF) 添加了 WPF 装饰器功能,这将允许我们扩展源代码编辑器以更好的方式组织它们,使其更具可读性和可访问性.

例如 Scott Gu demoed at PDC 2008 的摘要评论可视化工具。

所以期待开发者的美好明天:)

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

我为 Visual Studio 2013 找到了这个,发现它非常有用。即使您使用 .....

在代码周围加上简单的大括号,它也可以工作

分享后我发现其他人也提到了这个链接。我也对这个工具投了票。

C# Outlining Tool for Visual Studio 2013

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

在 Visual Studio 2019 中,如果要折叠 catchfinally 中的大括号,折叠 switchcasedefault、折叠多行 comments 等。

尝试使用C# outline 2019

【讨论】:

【参考方案12】:

# region ,#endregion 是明智的选择。

【讨论】:

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

以上是关于Visual Studio C# 语句崩溃的主要内容,如果未能解决你的问题,请参考以下文章

C# 应用程序在已部署 (.exe) 版本中因缓冲区溢出而崩溃,但在 Visual Studio 中则不然

怎样在visual studio 2008中的c#控制台中用console.writeline语句输出一个字符数组?用foreach循环怎么写

为啥此代码会使 Visual Studio 2015 崩溃?

Visual Studio 2019 C# 断点调试 & 凯撒密码,单码密码实现

C# Visual Studio 2012 语音到 textBox1

如何离线安装Visual Studio 2017