Visual Studio C#ステートメントの折りたたみ


180

本当に長いコードブロック(とにかくリファクタリングする必要がありますが、これはこの質問の範囲外です)を編集するとき、関数ブロックを折りたたむことができるように、ステートメントブロックを折りたたむことができることを切望しています。つまり、中かっこで囲まれたすべてのコードのアウトラインにマイナスアイコンが表示されたら素晴らしいです。関数、クラス、領域、名前空間、使用法では表示されますが、条件付きブロックや反復ブロックでは表示されません。ifs、switchs、foreachsのようなものを折りたたむことができれば素晴らしいでしょう!

少しグーグルで調べたところ、明らかにVSでのC ++のアウトラインではこれが可能ですが、VSでのC#のアウトラインでは許可されていません。理由はわかりません。Notepad ++でもC#の書式設定を選択するとこれらが折りたたまれるので、Visual Studioがそうしない理由がわかりません。

この動作を可能にするVS2008アドインを知っている人はいますか?それとも何らかの隠された設定ですか?

追加のために編集:リージョンの挿入はもちろんオプションであり、私にはすでに発生していましたが、率直に言って、すでに中括弧で囲まれているリージョンで物をラップする必要はありません...既存のコードでは、とにかく問題をより適切に分離できるようにリファクタリングします。(リージョンの代わりに新しいメソッドで「ラッピング」;)


6
ところで、これらの2つのショートカットが私の人生を非常に簡単にすることがわかりました:切り替えの概要:Ctrl + M、Mすべて折りたたむ:Ctrl + M、O
Gaurav

2
Ctrl + M、Lは、再帰的な折りたたみ/展開を切り替えます。もちろん、これはあなたに単一の行を残すことができます。ただし、その行の内側には(Ctrl + M、M)があり、適切に要約されたファイルが残ります。
patridge

2
これはVS 2012の同等のプラグインです。stackoverflow.com
18388280

関連:コード折りたたみの問題、Jeff Atwood、2008年
Nick Alexeev

回答:


267

Visual Studio 2017以降、ステートメントの折りたたみが組み込まれています。

2017年より前のバージョンのVSでこのタスクを実行するいくつかの拡張機能があり、VS 2010バージョンから始まります。

最後の拡張機能はVS 2015とVS 2017のみをサポートしますが、これは最も強力な拡張機能です。
折りたたまれたブロック内の構文の色分けをサポートし、フォールトトレラントで最適化されています。

ブラウザーを使用してダウンロードした後、拡張機能がインストールされないように見える場合は、組み込みのVisual Studio拡張機能マネージャーを使用してみてください。


これは素晴らしいです、私は長い間このようなものを探していました。本当の答えになるはずです!(しかし、VS2010 non-expressエディションを使用する場合にのみ、私は推測します...)
rikoe

この拡張機能は素晴らしいですが、ハンドラー(.ashx)では機能しません
Jemsworld


3
Visual Studioにこのプラグインさえ必要であるという事実は、気が遠くなるほどで​​す。これは標準的な動作です。良さ。
Ryan Rodemoyer、2014年

@Odys、拡張機能をアンインストールしてから再インストールし、Ctrl M + Oの問題を修正します。
Shahedur Ra​​hman 2014

21

私はアドインを意識していませんが、あなたはリージョンについて言及しており、私はこのようなことをすることに何の問題もないと思います...

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 Coehoorn、2008年

10
彼のコードは正しいです。このように領域を定義できる場所に限定されません(最初の範囲外で終了しない限り)
John

3
元の質問の編集をご覧ください。開発者の側で必要な手動のアクション(1回または2回のクリックで領域を
折り返す

1
私はあなたVB.NETのだ思考と信じ@Joel
ブライアン・アンダーソン

このスレッドでリンクされているプラ​​グインはすべて、リージョンを使用するよりも優れています。夜と昼。
Glimpse 2013

19

Visual Studio内でテキストの特定のブロックを折りたたむことができますが、自動アウトラインをオフにする必要があります。

コードウィンドウを右クリックし、(Outline | Stop Outlining)を選択します。

次に、テキストを選択し、右クリックして(アウトライン|選択を非表示)を選択します。

自動アウトラインを再びオンにすると、カスタムの「リージョン」は折りたたまれなくなります。


3
けっこうだ。私はこの質問を通して、これらのブロックを自動アウトラインに追加する方法を見つけたいと思っています。
Grank 2008年

1
マット、自動アウトラインを停止せずに(VS 2012で)実行できます。テキストを選択して、アウトライン>選択
範囲を

3

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
}

5
これは2008年の新機能ではありません。2005年もサポートしています。

3

別のことを言いましょう:を押す(ctrl+m,ctrl+h)か、編集>アウトライン>選択を非表示にするのはとても便利です。


1
@Mahdi問題は、コードのブロックを折りたたむツールに関するものでした。いくつかの組み合わせをクリックすると、if、for / whileループなどがすべて折りたたまれ、コードを可能な限り高いレベルで読み取ることができます。次に、コードをさらに詳しく説明します。最初にすべてのリージョンを折りたたむ必要があり、どのリージョンであるかが正確にわからないため、ソリューションは実行可能ではありません。今後ともよろしくお願いいたします。
ローマ

1
それは、より簡単かつ柔軟であるあなたが最初のコメントの何かが、この下に隠すことができますので、
でM


0

ここで、VS 2010でMicrosoftがManaged Extensibility Framework(MEF)を使用してWPF装飾機能を追加したことをここに追加します。これにより、ソースコードエディターを拡張して、より読みやすくアクセスしやすいように整理することができます。

たとえば、Scott GuがPDC 2008でデモしたサマリーコメントビジュアライザ。

開発者にとってより良い明日を楽しみにしています:)


0

Coderushがすべてのコードブロックの概要を説明します。ブロックを展開/折りたたむことができるかどうかはわかりませんが、アウトラインが次善策です。私はコードラッシュの代わりにリシャーパーを使用していますが、私の知る限り、ブロック折りたたみは提供されていません:(



0

VS2017では、コードのセクションを強調表示し、右クリックして[アウトライン]> [選択を非表示]を選択できます。これによりコードが折りたたまれ、ハイライト表示されたセクションに切り替わります。


-2

#region、#endregionはスマートオプションです。


10
StyleCopルールSA1123:DoNotPlaceRegionsWithinElements:リージョンがコード要素の本体内に配置されると、このルールの違反が発生します。Visual Studioを含む多くのエディターでは、領域はデフォルトで折りたたまれて表示され、領域内のコードを非表示にします。要素の本体内でコードを非表示にすることは一般に悪い習慣です。これは、コードが長期間にわたって維持されるため、誤った決定につながる可能性があるためです。
サムハーウェル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.