Crollo dell'istruzione C # di Visual Studio


180

Quando modifico blocchi di codice veramente lunghi (che dovrebbero essere sicuramente rifattorizzati comunque, ma questo va oltre lo scopo di questa domanda), desidero spesso la possibilità di comprimere blocchi di istruzioni come si possono comprimere blocchi funzionali. Vale a dire, sarebbe bello se l'icona meno apparisse nella struttura del codice per tutto ciò che è racchiuso tra parentesi graffe. Sembra apparire per funzioni, classi, regioni, spazi dei nomi, usi, ma non per blocchi condizionali o iterativi. Sarebbe fantastico se potessi far crollare cose come if, switch, foreaches, quel genere di cose!

Cercando su questo un po ', ho scoperto che apparentemente delineare C ++ in VS permette questo, ma delineare C # in VS no. Non capisco davvero perché. Anche notepad ++ sarà così collasso se seleziono la formattazione C #, quindi non capisco perché Visual Studio non lo faccia.

Qualcuno sa di un componente aggiuntivo VS2008 che abiliterà questo comportamento? O una sorta di impostazione nascosta per questo?

Modificato per aggiungere: l'inserimento di regioni è ovviamente un'opzione e mi è già venuto in mente, ma francamente, non avrei dovuto avvolgere le cose in una regione che sono già racchiuse tra parentesi graffe ... se volevo modificare il codice esistente, lo rifarrei solo per avere una migliore separazione delle preoccupazioni comunque. ("wrapping" con nuovi metodi anziché regioni;)


6
A proposito: ho scoperto che queste due scorciatoie mi hanno semplificato la vita: Attiva / disattiva contorno: Ctrl + M, M Comprimi tutto: Ctrl + M, O
Gaurav,

2
Ctrl + M, L attiva / disattiva un collasso / espansione ricorsivo. Naturalmente, questo può lasciarti con una sola riga. All'interno di quella linea, però (Ctrl + M, M) ti lascia un file ben riassunto.
Patridge

2
Ecco un plug-in equivalente per VS 2012: stackoverflow.com/questions/18388280/…
Glimpse

relativi: Il problema con la piegatura del codice di Jeff Atwood, 2008
Nick Alexeev,

Risposte:


267

A partire da Visual Studio 2017, il collasso delle istruzioni è integrato.

Esistono diverse estensioni che eseguono questa attività per le versioni pre-2017 di VS, a partire dalla versione VS 2010:

L'ultima estensione supporta solo VS 2015 e VS 2017, ma è la più potente.
Supporta la colorazione della sintassi all'interno dei blocchi compressi, è più tollerante ai guasti e ottimizzata.

Se l'estensione non sembra essere installata dopo aver utilizzato un browser per scaricarla, prova a utilizzare il gestore estensioni di Visual Studio incorporato.


È fantastico, ho cercato qualcosa di simile per così tanto tempo. Dovrebbe essere la vera risposta! (Ma solo se usi VS2010 non-express edition, immagino ...)
rikoe

Questa estensione è fantastica ma non funziona sui gestori (.ashx)
Jemsworld,


3
Il fatto che abbiamo persino bisogno di questo plugin per Visual Studio è sbalorditivo. Questo dovrebbe essere un comportamento standard. Bontà.
Ryan Rodemoyer,

@Odys, disinstallare e quindi reinstallare l'estensione per risolvere il problema Ctrl M + O.
Shahedur Rahman,

21

Non sono a conoscenza di componenti aggiuntivi, ma hai menzionato le regioni e non vedo nulla di male nel fare qualcosa di simile ...

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
}

EDIT: in risposta alla domanda EDIT: hai ragione, attaccare un sacco di regioni ovunque non è l'ideale e il refactoring è probabilmente la strada da percorrere. Ma sembra che tu stia cercando qualcosa di magico che "organizzi" il codice per te, e non credo che esista.


IIRC, non è possibile definire le regioni all'interno di una funzione.
Joel Coehoorn,

10
il suo codice è corretto; non sei limitato a dove puoi definire regioni come questa (purché non finisca al di fuori del campo di applicazione dell'inizio)
Giovanni,

3
Si prega di consultare la modifica della domanda originale; l'azione manuale richiesta da parte dello sviluppatore (anche usando una scorciatoia per il wrapping della regione con uno o due clic) non risponde realmente alla domanda / desiderio che ciò avvenga automaticamente
Grank

1
@Joel Credo che tu stia pensando a VB.NET
Bryan Anderson il

Tutti i plugin che trovi collegati in questo thread sono migliori dell'uso delle regioni. Notte e giorno.
Glimpse,

19

È possibile comprimere specifici blocchi di testo in Visual Studio, ma è necessario disattivare la struttura automatica.

Fare clic con il tasto destro nella finestra del codice e selezionare (Contorno | Interrompi contorno)

Quindi, selezionare un po 'di testo, fare clic con il tasto destro e selezionare (Contorno | Nascondi selezione)

Quando riattivi il profilo automatico, le "Regioni" personalizzate non crollano più.


3
Giusto. Spero di trovare attraverso questa domanda un modo per aggiungere questi blocchi al profilo automatico, dato che non ha davvero senso che non lo siano.
Grank

1
Matt, puoi farlo (in VS 2012) senza interrompere la definizione automatica. Seleziona testo e struttura> nascondi selezione
nawfal

3

Visual Studio 2008 supporta le aree all'interno delle funzioni purché siano mantenute nello stesso livello gerarchico di codice

#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
Questo non è nuovo nel 2008. Anche il 2005 lo supporta.
Kon

3

Lasciami dire qualcosa di diverso: premi (ctrl+m,ctrl+h)o in modifica> contorni> nascondi selezione è così utile.


1
@Mahdi la domanda era sullo strumento che comprimerà blocchi di codice. Fai clic su una combinazione e i tuoi if, per / while loop, ecc. Sono tutti compressi in modo da poter leggere il tuo codice nel livello più alto possibile. Quindi approfondiresti il ​​codice. La tua soluzione non è praticabile perché dovresti prima comprimere tutte le regioni e non vedi quale regione è esattamente. Buona fortuna in futuro.
Romano

1
puoi prima commentare qualcosa, quindi nasconderti sotto questo in modo che sia più facile e flessibile
M al


0

Aggiungerò qui che in VS 2010 Microsoft ha aggiunto le funzionalità di adorner WPF utilizzando Managed Extensibility Framework (MEF), questo ci permetterà di estendere l'editor del codice sorgente per organizzarli in un modo molto migliore per renderlo più leggibile e accessibile.

Ad esempio il visualizzatore di commenti di riepilogo che Scott Gu ha presentato alla demo di PDC 2008 .

Quindi aspettiamo un domani migliore per gli sviluppatori :)


0

Coderush delineerà tutti i blocchi di codice per te. Non sono sicuro se ti consente di espandere / comprimere i blocchi, ma delineare è la cosa migliore successiva. Uso resharper invece di coderush che per quanto ne so non fornisce neanche il collasso dei blocchi :(


0

L'ho trovato per Visual Studio 2013 e l'ho trovato molto utile. Funziona anche se metti delle parentesi graffe semplici attorno al tuo codice con {.....}

Dopo aver condiviso ho trovato che anche qualcun altro ha menzionato questo link. Il mio voto è anche per questo strumento.

Strumento per delineare C # per Visual Studio 2013


0

In VS2017 è possibile evidenziare una sezione di codice, fare clic con il tasto destro, Struttura> Nascondi selezione. Questo comprimerà il codice e fornirà un interruttore alla sezione evidenziata.


-2

# region, # endregion è l'opzione intelligente.


10
Regola StyleCop SA1123: DoNotPlaceRegionsWithinElements: Una violazione di questa regola si verifica ogni volta che una regione viene inserita nel corpo di un elemento di codice. In molti editor, incluso Visual Studio, l'area apparirà compressa per impostazione predefinita, nascondendo il codice all'interno dell'area. In genere è una cattiva pratica nascondere il codice all'interno del corpo di un elemento, poiché ciò può portare a decisioni sbagliate poiché il codice viene mantenuto nel tempo.
Sam Harwell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.