Frage

Hinweis : Dieses „Feature“ wurde nun hinzugefügt, um Visual Studio 2015, aber die Frage wird noch eine Weile halten, da nicht jeder Entwickler oder jeder Entwickler-Shop Zugang bringt es auf den neuesten und größten IDE sobald es kommt.

ORIGINAL FRAGE:

Normalerweise würde ich nicht „müssen“ oder sogar eine lächerliche Funktion wie Codebereiche innerhalb Methodenrümpfe betrachten, aber: Ich bin Refactoring VB.NET-Code, wo Methoden routinemäßig fünfhundert Zeilen Code ausführen oder mehr und die Referenzen sind so eng miteinander gekoppelt, dass der Code als Extraktionsverfahren Refactoring solche einfachen entzieht.

Und das ist, warum ich dachte, ich würde versuchen Regionen innerhalb eines Verfahrens Körper. Ich wollte nur den Code für die kurzfristig organisieren. Aber die IDE nicht lassen Sie mich (in einem Compiler-Fehler geführt hat.) Ich bin nur neugierig, warum? Scheint, wie Codebereiche sollte der Compiler nicht auswirken, intellisense usw. Bin ich etwas fehlt? (Immer noch mit VS 2005 btw.)

Interessant: Dies scheint die Sprache spezifisch. Es ist OK in C # (ich habe nicht, dass zunächst prüfen), aber nicht in VB.NET.

public module MyModule
    Sub RunSnippet()
        dim a as A = new A (Int32.MaxValue )

        #region 
        Console.WriteLine ("")
        #end region
       ....

, die einen Compiler-Fehler, sondern die C # -Version bekommt ist in Ordnung.

War es hilfreich?

Lösung

Wie von November 2015. In Visual Studio 2015 es wird jetzt unterstützt, nur das tun, was Sie mögen

Beispielcode:

With frmMain
#region "A sample region in odd place"
  .show()
  .text = "Sample"
#end region
End With

Hinweis: In früheren Versionen von Visual Studio scheint es, dass es nicht in VB.NET funktioniert, aber in C # es funktioniert .

Andere Tipps

Ich denke, Code Regionen würde wahrscheinlich nicht in Methodenrümpfe unterstützt werden, da sie, wie Sie es nennen, eine (etwas) wäre „lächerlich Merkmal“ - jedoch in C #, das funktioniert Arbeit zumindest in VS 2008 und VS 2010 -. einfach nicht in VB.NET

Das wird gesagt, würde ich es vermeiden. Put-Bereiche innerhalb eines Verfahrens Körper würde nur führt zu Menschen größere Methoden machen (denn das ist das einzige Mal, wenn es sich lohnen würde), was etwas ist, die vermieden werden sollten, nicht gefördert werden.

Wenn Ihr Code:

trotzt einfache refactoring Verfahren wie Extraktion

Ich würde konzentrieren, sondern auf dem Tun „Komplexes“ Refactoring (oder was auch immer es nimmt), um zu versuchen, diese Methoden zu brechen. Es gibt keine Möglichkeit, Ihre „vier oder fünfhundert Zeilen“ lange Methoden an allen wartbar sind in ihrem aktuellen Zustand.

Ich persönlich würde lassen sie „Schmerz“ verursacht -. Machen es offensichtlich, dass sie arbeiten müssen, vorne rechts und in der Mitte, bis Sie sie und refactor Abschnitte brechen

Es ist explizit in Kapitel 3.3 der Visual Basic 9.0 Language Specification:

Region Richtlinien Gruppe Zeilen Quellcode, haben aber keine weiteren Auswirkungen auf Kompilierung. Die gesamte Gruppe kann kollabiert und versteckt, oder erweitert und betrachtet werden, die in der integrierten Entwicklungsumgebung (IDE). Diese Richtlinien speziell, da sie weder noch beenden innerhalb eines Verfahrens Körper

beginnen

Oder mit anderen Worten: Sie kann es nicht tun, weil die Spezifikation so sagt.

Wie, warum es so angegeben wurde, ich denke, es hat etwas mit der alten IDE-Funktion zu tun, dass VB hatte, so lange ich mich erinnern kann: Werkzeuge + Optionen, Text-Editor, Basic, VB Spezifische, Zeige Verfahren Zeilenseparatoren. Das ist nur eine Vermutung, wahrscheinlich nicht sehr gut.


Update:. Jetzt von Roslyn unterstützt, enthalten zunächst mit VS2015

Eine weitere einfache alternative Methode:

Was Sie tun können, ist im Grunde den Code wählen Sie die #Region #End Region hinzufügen und im Grunde klicken:

Ctrl + M , Ctrl + H

Diese wickelt grundsätzlich den Code. Und dann, um es noch übersichtliches und leicht zu finden Sie den Code kommentieren. Das Endergebnis etwas würde wie folgt aussehen:

eingeben Bild Beschreibung hier

Ich weiß nicht, über VB, aber in C # diese so weit seit 1.0 erlaubt wurde, wie ich bin mir dessen bewusst.

Tatsächlich können Sie sogar setzen Codebereiche an seltsamen Orten, die sich kreuzen Tive. Zum Beispiel:

class Test
{
    static void Main()
    {
        if (DateTime.Now.Hour > 12)
        {
#region Foo
            Console.WriteLine("Afternoon");            
        }
#endregion
    }
}

Hier ist der Bereich startet in der if Aussage, aber Ende außerhalb. Schrecklich, aber der Compiler ist in Ordnung mit ihm.

Was meinen Sie, wenn Sie die IDE sagte nicht „let“ Sie Code setzen in Regionen? Haben Sie einen Compiler-Fehler?

Das war einfach eine Wahl des VB-Team gemacht, wenn das Hinzufügen der Regionen verfügen in Version 7 der Visual Basic-Sprache. Es wurde als ein Merkmal gesehen, die für die Organisation in einer Erklärung Ebene und nicht in einem Verfahren und daher nützlich war, nur auf diesem Niveau erlaubt.

Das C # Team fühlte sich anders über diese Funktion und ermöglicht es in vielen anderen Orten. Ich habe immer fand es überraschend, dass Richtlinien C # #region in verschiedenen Erklärung Kontexten auftreten können.

#region Foo
class Bar {
#endregion

}

Der entsprechende Code wird in VB nicht erlaubt.

Für alle, für die letzte Antwort auf diese Frage suchen, ist dies nun möglich in VB.NET (ab Version 14 auf).

Region Richtlinien innerhalb Methodenrümpfe

Sie können setzen # Region ... # Ende Region Trennzeichen überall in einer Datei innerhalb von Funktionen und Spanning auch über Funktionsrümpfe.

Das Beispiel aus dem OP ist jetzt vollkommen legal Syntax:

Sub RunSnippet()
    Dim a as A = New A (Int32.MaxValue )

    #Region "Test"
    Console.WriteLine ("")
    #End Region
End Sub

Visual Studio 2003 hatte sie für VB.NET, aber Feature in wurde entfernt Visual Studio 2005 und später. Wirklich ärgerlich, wenn große Prozeduren Refactoring, aber Sie können das Codefenster aufgeteilt.

Ehrlich gesagt, möchte ich C # Region Nutzung beschränken würde, weil sie übermäßig verwendet. Ich habe einen Makro, dass Streifen sie aus all Code-Dateien, wenn C # -Projekten vererben.

Ein weiteres entfernt war auch die Liste der overridable Methoden in der Navigationsleiste . Ich überprüfe, um zu sehen, ob sie diese Funktion für jede neue Version von Visual Studio seit 2005 wieder aufgenommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top