2008-11-12 30 views
175

Cuando edito bloques de código realmente largos (que definitivamente deberían refactorizarse de todos modos, pero eso está más allá del alcance de esta pregunta), a menudo anhelo la posibilidad de colapsar bloques de instrucciones como uno puede colapsar bloques de funciones. Es decir, sería genial si el ícono menos apareciera en el contorno del código para todo lo que se incluye entre llaves. Parece que aparece para funciones, clases, regiones, espacios de nombres, usos, pero no para bloques condicionales o iterativos. Sería fantástico si pudiera colapsar cosas como ifs, switches, foreaches, ¡ese tipo de cosas!Visual Studio C# colapsando declaración

Haciendo un análisis al respecto un poco, descubrí que aparentemente el delineado de C++ en VS permite esto, pero el delineamiento de C# en VS no lo hace. Realmente no entiendo por qué. Incluso Notepad ++ lo hará, por lo que estos colapsan si selecciono el formato de C#, por lo que no entiendo por qué Visual Studio no lo hace.

¿Alguien sabe de un complemento VS2008 que permita este comportamiento? O algún tipo de configuración oculta para ello?

Editado para agregar: insertar regiones es, por supuesto, una opción y ya se me ocurrió, pero francamente, no debería tener que envolver cosas en una región que ya están envueltas en llaves ... si yo fuera al editar el código existente, simplemente lo refactorizaría para tener una mejor separación de la preocupación de todos modos. ("Envoltura" con nuevos métodos en lugar de las regiones;)

+6

Por cierto: descubrí que estos dos atajos me hacían la vida muy fácil: Alternar esquema: Ctrl + M, M Contraer todo: Ctrl + M, O – Gaurav

+2

Ctrl + M, L alterna un colapso/expandir recursivo. Por supuesto, esto puede dejarte con una sola línea. Dentro de esa línea, sin embargo (Ctrl + M, M) te deja un archivo muy bien resumido. – patridge

+2

Aquí hay un complemento equivalente para VS 2012: http://stackoverflow.com/questions/18388280/collapsible-loop-blocks-in-visual-studio-2012-c/18388697?noredirect=1#18388697 – Glimpse

Respuesta

261

partir de Visual Studio 2017, el colapso de la declaración es incorporado.

Hay varias extensiones que realizan esta tarea para las versiones pre-2017 de VS, comenzando con VS 2010 versión:

La última extensión sólo es compatible con VS 2015 y VS 2017, pero es el más poderoso.
Admite la coloración de sintaxis dentro de bloques contraídos, es más tolerante a fallas y optimizado.

Si la extensión no parece instalarse después de utilizar un navegador para descargarla, intente utilizar el administrador de extensiones de Visual Studio incorporado.

+0

Esto es genial, he estado buscando algo así por mucho tiempo. Debería ser la verdadera respuesta! (Pero solo si usa la versión no expresa VS2010, supongo ...) – Riko

+0

Esta extensión es excelente pero no funciona en los controladores (.ashx) – Jemsworld

+3

'Ctrl M + O' ya no funciona. ¿Cómo puedo arreglar esto? – Odys

20

No estoy al tanto de complementos, pero se mencionó regiones y no veo nada malo en hacer algo como esto ...

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 
} 

EDITAR: En respuesta al EDIT de la pregunta: tienes razón, incluir a un grupo de regiones en todas partes no es lo ideal y la refactorización es probablemente el camino a seguir. Pero parece que estás buscando algo mágico que "organice" el código para ti, y no creo que exista.

+0

IIRC, no puede definir regiones dentro de una función. –

+10

su código es correcto; no está limitado a dónde puede definir regiones como esta (siempre que no termine fuera del alcance del comienzo) – John

+0

@john es correcto – kenny

3

Visual Studio 2008 es compatible con las regiones dentro de las funciones de todo el tiempo que los mantiene en el mismo código de nivel jerárquico

#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

Esto no es nuevo en 2008. 2005 lo respalda también. – Kon

19

Puede contraer bloques específicos de texto dentro de Visual Studio, pero hay que desactivar esquematización automática .

Haga clic derecho en la ventana de código y seleccione (delinear | Detener Esquema)

A continuación, seleccione algún texto, haga clic derecho y seleccionar (Esbozando | Ocultar selección)

Cuando encienda esbozar automática de nuevo, sus "Regiones" personalizadas ya no colapsarán.

+3

Bastante justo. Espero encontrar a través de esta pregunta una forma de agregar estos bloques a la descripción automática, ya que realmente no tiene sentido que no lo sean. – Grank

+1

Matt, puede hacerlo (en VS 2012) sin detener el trazado automático. Solo seleccione texto y esquema> ocultar selección – nawfal

0

Agregaré aquí que en VS 2010 Microsoft ha agregado las capacidades de WPF adorner usando Managed Extensibility Framework (MEF), esto nos permitirá ampliar el editor de código fuente para organizarlos de una manera mucho mejor para hacerlo más legible y accesible.

Por ejemplo, el visualizador de comentarios resumidos que Scott Gu demoed at PDC 2008.

Así que mirar hacia adelante a un futuro mejor para los desarrolladores :)

-2

# región, # endRegion es la opción inteligente.

+10

Regla StyleCop SA1123: DoNotPlaceRegionsWithinElements: una violación de esta regla ocurre cada vez que una región se coloca dentro del cuerpo de un elemento de código. En muchos editores, incluido Visual Studio, la región aparecerá colapsada de forma predeterminada, ocultando el código dentro de la región. En general, es una mala práctica ocultar código dentro del cuerpo de un elemento, ya que esto puede llevar a malas decisiones, ya que el código se mantiene a lo largo del tiempo. –

0

Coderush describirá todos los bloques de código por usted. No estoy seguro de si le permite expandir/colapsar los bloques, pero el delinear es la mejor opción. Yo uso ReSharper en lugar de CodeRush que hasta donde yo sé no proporciona bloque de colapsar ningún :(

1

Permítanme decir algo diferente: (ctrl+m,ctrl+h) de prensa o en Editar> esbozar> Ocultar selección su tan útil.

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/whats-reputation) lo hará poder [comentar cualquier publicación] (http://stackoverflow.com/help/privileges/comment). –

+0

¿me puede decir cuál es el problema con mi respuesta? –

+1

@Mahdi, la pregunta era sobre la herramienta que colapsará los bloques de código. Hace clic en alguna combinación y sus ifs, para/while loops, etc. se colapsan para que pueda leer su código en el nivel más alto posible. Luego profundizarás en el código. Su solución no es viable porque primero tendría que colapsar todas las regiones y no verá qué región es exactamente. Buena suerte en el futuro. – Roman

0

Lo encontré para Visual Studio 2013 y lo encontré muy útil. Funciona incluso si pone llaves simples alrededor de su código con {.....}

Después de compartir encontré que alguien más también mencionó este enlace. Mi voto es para esta herramienta también.

C# Outlining Tool for Visual Studio 2013

0

En VS2017 se puede destacar una sección de código, haga clic en, destacando> Ocultar selección. Esto colapsará el código y proporcionará un alternar a la sección resaltada.