Visual Studio C # -Anweisung wird reduziert


180

Wenn ich wirklich lange Codeblöcke bearbeite (die definitiv überarbeitet werden sollten, aber das geht über den Rahmen dieser Frage hinaus), sehne ich mich oft nach der Möglichkeit, Anweisungsblöcke so zu reduzieren, wie man Funktionsblöcke reduzieren kann. Das heißt, es wäre großartig, wenn das Minus-Symbol auf der Code-Gliederung für alles in geschweiften Klammern erscheinen würde. Es scheint für Funktionen, Klassen, Regionen, Namespaces, Verwendungen zu erscheinen, jedoch nicht für bedingte oder iterative Blöcke. Es wäre fantastisch, wenn ich Dinge wie Wenn, Schalter, Foreaches, so etwas zusammenbrechen könnte!

Als ich ein wenig darüber googelte, stellte ich fest, dass anscheinend C ++ - Konturen in VS dies zulassen, C # -Konturen in VS jedoch nicht. Ich verstehe nicht wirklich warum. Sogar Notepad ++ wird so zusammenbrechen, wenn ich die C # -Formatierung auswähle, sodass ich nicht verstehe, warum Visual Studio dies nicht tut.

Kennt jemand ein VS2008-Add-In, das dieses Verhalten ermöglicht? Oder eine versteckte Umgebung dafür?

Bearbeitet, um hinzuzufügen: Das Einfügen von Regionen ist natürlich eine Option und ist mir bereits in den Sinn gekommen, aber ehrlich gesagt sollte ich keine Dinge in eine Region einschließen müssen, die bereits in geschweifte Klammern eingeschlossen ist ... wenn ich die bearbeiten wollte Bestehenden Code würde ich einfach umgestalten, um eine bessere Trennung der Bedenken zu erreichen. ("Wrapping" mit neuen Methoden anstelle von Regionen;)


6
Übrigens: Ich fand, dass diese beiden Verknüpfungen mein Leben sehr einfach gemacht haben: Umriss umschalten: Strg + M, M Alle reduzieren: Strg + M, O
Gaurav

2
Strg + M, L schaltet ein rekursives Reduzieren / Erweitern um. Dies kann natürlich zu einer einzigen Zeile führen. Innerhalb dieser Zeile (Strg + M, M) erhalten Sie jedoch eine schön zusammengefasste Datei.
Patridge

2
Hier ist ein gleichwertiges Plugin für VS 2012: stackoverflow.com/questions/18388280/…
Blick auf den

verwandt: Das Problem mit der Code-Faltung von Jeff Atwood, 2008
Nick Alexeev

Antworten:


267

Ab Visual Studio 2017 ist das Reduzieren von Anweisungen integriert.

Es gibt mehrere Erweiterungen, die diese Aufgabe für VS-Versionen vor 2017 ausführen, beginnend mit der VS 2010-Version:

Die letzte Erweiterung unterstützt nur VS 2015 und VS 2017, ist jedoch die leistungsstärkste.
Es unterstützt die Syntaxfärbung in reduzierten Blöcken, ist fehlertoleranter und optimiert.

Wenn die Erweiterung nicht installiert zu werden scheint, nachdem Sie sie mit einem Browser heruntergeladen haben, verwenden Sie den integrierten Visual Studio-Erweiterungsmanager.


Das ist großartig, ich habe so lange nach so etwas gesucht. Sollte die richtige Antwort sein! (Aber nur, wenn Sie VS2010 Non-Express Edition verwenden, denke ich ...)
Rikoe

Diese Erweiterung ist großartig, funktioniert aber nicht mit Handlern (.ashx)
Jemsworld


3
Die Tatsache, dass wir dieses Plugin sogar für Visual Studio benötigen, ist umwerfend. Dies sollte Standardverhalten sein. Güte.
Ryan Rodemoyer

@Odys, deinstallieren Sie die Erweiterung und installieren Sie sie erneut, um das Ctrl M + O-Problem zu beheben.
Shahedur Rahman

21

Add-Ins sind mir nicht bekannt, aber Sie haben Regionen erwähnt, und ich sehe nichts Falsches daran, so etwas zu tun ...

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
}

BEARBEITEN: Als Antwort auf die Frage BEARBEITEN: Sie haben Recht, es ist nicht ideal, überall eine Reihe von Regionen festzuhalten, und Refactoring ist wahrscheinlich der richtige Weg. Aber es scheint, dass Sie nach etwas Magischem suchen, das den Code für Sie "organisiert", und ich glaube nicht, dass es das gibt.


IIRC, Sie können keine Regionen innerhalb einer Funktion definieren.
Joel Coehoorn

10
sein Code ist korrekt; Sie sind nicht darauf beschränkt, wo Sie Regionen wie diese definieren können (solange Sie nicht außerhalb des Bereichs des Anfangs enden)
John

3
Bitte beachten Sie die Bearbeitung der Originalfrage; Manuelle Maßnahmen seitens des Entwicklers (selbst unter Verwendung einer Verknüpfung zum
Umschließen von Regionen

1
@ Joel Ich glaube, Sie denken an VB.NET
Bryan Anderson

Alle in diesem Thread verlinkten Plugins sind besser als die Verwendung von Regionen. Nacht und Tag.
Blick

19

Sie können bestimmte Textblöcke in Visual Studio reduzieren, müssen jedoch die automatische Gliederung deaktivieren.

Klicken Sie mit der rechten Maustaste in Ihr Codefenster und wählen Sie (Gliederung | Gliederung beenden).

Wählen Sie dann einen Text aus, klicken Sie mit der rechten Maustaste und wählen Sie (Gliederung | Auswahl ausblenden).

Wenn Sie die automatische Gliederung wieder aktivieren, werden Ihre benutzerdefinierten "Regionen" nicht mehr reduziert.


3
Meinetwegen. Ich hoffe, durch diese Frage einen Weg zu finden, diese Blöcke zur automatischen Gliederung hinzuzufügen, da es nicht wirklich Sinn macht, dass sie nicht so sind.
Grank

1
Matt, Sie können dies (in VS 2012) tun, ohne die automatische Gliederung zu stoppen.
Wählen Sie

3

Visual Studio 2008 unterstützt Regionen innerhalb von Funktionen, solange Sie sie auf derselben Code-Hierarchieebene halten

#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
Dies ist 2008 nicht neu. 2005 unterstützt es ebenfalls.
Kon

3

Lassen Sie mich etwas anderes sagen: Drücken Sie (ctrl+m,ctrl+h)oder in Bearbeiten> Gliederung> Auswahl ausblenden, es ist so nützlich.


1
@ Mahdi die Frage war über das Tool, das Codeblöcke reduzieren wird. Sie klicken auf eine Kombination und Ihre ifs, for / while-Schleifen usw. sind alle reduziert, damit Sie Ihren Code auf der höchstmöglichen Ebene lesen können. Dann würden Sie tiefer in den Code einsteigen. Ihre Lösung ist nicht realisierbar, da Sie zuerst alle Regionen reduzieren müssten und nicht sehen, um welche Region es sich genau handelt. Viel Glück in der Zukunft.
Roman

1
Sie können zuerst etwas kommentieren und dann darunter verstecken, damit es einfacher und flexibler ist
M am


0

Ich möchte hier hinzufügen, dass Microsoft in VS 2010 WPF-Adorner-Funktionen mithilfe des Managed Extensibility Framework (MEF) hinzugefügt hat. Auf diese Weise können wir den Quellcode-Editor erweitern, um sie besser organisieren und zugänglicher zu machen.

Zum Beispiel der Visualizer für Zusammenfassungskommentare, den Scott Gu auf der PDC 2008 vorgeführt hat .

Freuen Sie sich also auf ein besseres Morgen für Entwickler :)


0

Coderush skizziert alle Codeblöcke für Sie. Ich bin mir nicht sicher, ob Sie damit die Blöcke erweitern / reduzieren können, aber die Gliederung ist das nächstbeste. Ich verwende Resharper anstelle von Coderush, was meines Wissens auch kein Block-Collapse ermöglicht :(


0

Ich habe dies für Visual Studio 2013 gefunden und fand es sehr hilfreich. Es funktioniert auch, wenn Sie mit {.....} einfache Klammern um Ihren Code setzen

Nach dem Teilen fand ich jemanden, der diesen Link ebenfalls erwähnte. Meine Stimme ist auch für dieses Tool.

C # Gliederungstool für Visual Studio 2013


0

In VS2017 können Sie einen Codeabschnitt markieren, mit der rechten Maustaste auf Gliederung> Auswahl ausblenden klicken. Dadurch wird der Code reduziert und der markierte Abschnitt umgeschaltet.


-2

# region, # endregion ist die intelligente Option.


10
StyleCop-Regel SA1123: DoNotPlaceRegionsWithinElements: Eine Verletzung dieser Regel tritt immer dann auf, wenn eine Region im Hauptteil eines Codeelements platziert wird. In vielen Editoren, einschließlich Visual Studio, wird die Region standardmäßig reduziert angezeigt, wodurch der Code in der Region ausgeblendet wird. Es ist im Allgemeinen eine schlechte Praxis, Code im Hauptteil eines Elements auszublenden, da dies zu Fehlentscheidungen führen kann, da der Code im Laufe der Zeit beibehalten wird.
Sam Harwell
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.