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 中,如果要折叠 catch
和 finally
中的大括号,折叠 switch
、case
、default
、折叠多行 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# 断点调试 & 凯撒密码,单码密码实现