Visual Studio C # declaración colapso


180

Al editar bloques de código realmente largos (que definitivamente deberían ser refactorizados de todos modos, pero eso está más allá del alcance de esta pregunta), a menudo anhelo la capacidad de colapsar bloques de instrucciones como uno puede colapsar bloques de funciones. Es decir, sería genial si el icono menos apareciera en el esquema del código para todo lo que se incluye entre llaves. Parece aparecer 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, interruptores, foreaches, ese tipo de cosas!

Buscando en Google un poco, descubrí que aparentemente el esquema de C ++ en VS permite esto, pero el esquema de C # en VS no. Realmente no entiendo por qué. Incluso notepad ++ se colapsará si selecciono el formato 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á envuelta entre llaves ... si fuera a editar el código existente, simplemente lo refactorizaría para tener una mejor separación de preocupaciones de todos modos. ("ajuste" con nuevos métodos en lugar de regiones;)


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

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

2
Aquí hay un complemento equivalente para VS 2012: stackoverflow.com/questions/18388280/…
Glimpse

relacionado: El problema con el plegamiento de código por Jeff Atwood, 2008
Nick Alexeev

Respuestas:


267

A partir de Visual Studio 2017, el colapso de sentencias está integrado.

Existen varias extensiones que realizan esta tarea para versiones anteriores a 2017 de VS, comenzando con la versión VS 2010:

La última extensión solo admite VS 2015 y VS 2017, pero es la más poderosa.
Es compatible con 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 usar un navegador para descargarla, intente usar el administrador de extensiones de Visual Studio incorporado.


Esto es genial, he estado buscando algo como esto por mucho tiempo. ¡Debería ser la verdadera respuesta! (Pero supongo que solo si usa la edición no express
VS2010

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


3
El hecho de que incluso necesitemos este complemento para Visual Studio es alucinante. Esto debería ser un comportamiento estándar. Bondad.
Ryan Rodemoyer

@Odys, desinstale y vuelva a instalar la extensión para corregir el problema Ctrl M + O.
Shahedur Rahman

21

No conozco los complementos, pero mencionaste regiones y no veo nada de 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 a la pregunta EDITAR: Tienes razón, pegar un montón de regiones en todas partes no es 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 por ti, y no creo que exista.


IIRC, no puede definir regiones dentro de una función.
Joel Coehoorn el

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 principio)
Juan

3
Por favor vea la edición de la pregunta original; la acción manual requerida por parte del desarrollador (incluso usando un acceso directo de
ajuste de

1
@ Joo, creo que estás pensando en VB.NET
Bryan Anderson

Todos los complementos que encuentre vinculados en este hilo son mejores que usar regiones. Noche y dia.
Vistazo

19

Puede contraer bloques de texto específicos dentro de Visual Studio, pero debe desactivar el esquema automático.

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

Luego, seleccione un texto, haga clic derecho y seleccione (Esquema | Ocultar selección)

Cuando vuelva a activar el esquema automático, sus "Regiones" personalizadas ya no colapsarán.


3
Lo suficientemente justo. Sin embargo, 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, puedes hacerlo (en VS 2012) sin detener el bosquejo automático. Simplemente seleccione el texto y el esquema> ocultar selección
nawfal

3

Visual Studio 2008 admite regiones dentro de funciones siempre que las mantenga en el mismo nivel jerárquico de código

#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
}

55
Esto no es nuevo en 2008. 2005 también lo admite.
Kon

3

Permítanme decir algo diferente: presione (ctrl+m,ctrl+h)o en editar> delinear> ocultar selección es muy útil.


1
@Mahdi, la pregunta era sobre la herramienta que colapsará bloques de código. Hace clic en alguna combinación y sus ifs, bucles for / while, etc. están todos contraídos para que pueda leer su código en el nivel más alto posible. Entonces profundizarías 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.
Romano

1
primero puedes comentar algo y luego esconderte debajo de esto para que sea más fácil y flexible
M al


0

Agregaré aquí que en VS 2010 Microsoft ha agregado capacidades de decorador WPF utilizando el Marco de Extensibilidad Administrada (MEF), esto nos permitirá extender el editor de código fuente para organizarlos de una manera mucho mejor para que sea más legible y accesible.

Por ejemplo, el visualizador de comentarios resumidos que Scott Gu demostró en PDC 2008 .

Así que esperamos un mejor mañana para los desarrolladores :)


0

Coderush describirá todos los bloques de código para usted. No estoy seguro si le permite expandir / colapsar los bloques, pero esbozar es la siguiente mejor opción. Uso resharper en lugar de coderush que, hasta donde sé, tampoco proporciona colapso de bloque :(



0

En VS2017 puede resaltar una sección de código, hacer clic con el botón derecho, Esquema> Ocultar selección. Esto colapsará el código y proporcionará un cambio a la sección resaltada.


-2

# region, # endregion es la opción inteligente.


10
Regla StyleCop SA1123: DoNotPlaceRegionsWithinElements: se produce una violación de esta regla cada vez que se coloca una región 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 el código dentro del cuerpo de un elemento, ya que esto puede conducir a malas decisiones ya que el código se mantiene con el tiempo.
Sam Harwell
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.