Instrução do Visual Studio C # recolhendo

180

Ao editar blocos de código muito longos (que definitivamente deveriam ser refatorados de qualquer maneira, mas que estão além do escopo desta pergunta), muitas vezes anseio pela capacidade de recolher blocos de instruções como se pode recolher blocos funcionais. Ou seja, seria ótimo se o ícone de menos aparecesse no esquema de código para tudo incluído entre chaves. Parece aparecer para funções, classes, regiões, namespaces, usos, mas não para blocos condicionais ou iterativos. Seria fantástico se eu pudesse recolher coisas como ifs, switches, foreaches, esse tipo de coisa!

Pesquisando um pouco sobre isso, descobri que, aparentemente, o C ++ no VS permite isso, mas o C # no VS não. Eu realmente não entendo o porquê. Até o bloco de notas ++ fará isso, se eu selecionar a formatação C #, para que não ocorra o motivo pelo qual o Visual Studio não faz.

Alguém sabe de um suplemento VS2008 que permitirá esse comportamento? Ou algum tipo de cenário oculto para isso?

Editado para adicionar: é claro que inserir regiões é uma opção e isso já me ocorreu, mas, francamente, eu não deveria ter que agrupar coisas em uma região que já esteja entre chaves ... se eu fosse editar o código existente, eu apenas o refatoraria para ter uma melhor separação de preocupações de qualquer maneira. ("quebra automática" com novos métodos em vez de regiões;)

Grank
fonte
6
BTW: eu descobri que estes dois atalhos fez a minha vida muito fácil: esboço de alternância: Ctrl + M, M Reduzir Todos: Ctrl + M, O
Gaurav
2
Ctrl + M, L alterna um recolhimento / expansão recursivo. Claro, isso pode deixar você com uma única linha. Dentro dessa linha, no entanto (Ctrl + M, M) deixa você com um arquivo bem resumido.
31 de
2
Aqui está um plug-in equivalente para o VS 2012: stackoverflow.com/questions/18388280/…
Glimpse
relacionados: O problema com o dobramento de código Jeff Atwood, 2008
Nick Alexeev 02/02

Respostas:

267

A partir do Visual Studio 2017, o recolhimento de instruções é incorporado.

Existem várias extensões que executam essa tarefa nas versões anteriores ao 2017 do VS, começando com a versão do VS 2010:

A última extensão suporta apenas o VS 2015 e o VS 2017, mas é a mais poderosa.
Ele suporta cores de sintaxe dentro de blocos recolhidos, é mais tolerante a falhas e otimizado.

Se a extensão não parece ser instalada depois que você usou um navegador para fazer o download, tente usar o gerenciador de extensões do Visual Studio.

Skyblade
fonte
Isso é ótimo, eu tenho procurado algo assim por tanto tempo. Deve ser a resposta real! (Mas só se você usar VS2010 edição não-expresso, eu acho ...)
rikoe
Esta extensão é grande, mas não o seu trabalho em manipuladores (.ashx)
Jemsworld
3
O fato de precisarmos desse plug-in para o Visual Studio é incompreensível. Esse deve ser um comportamento padrão. Bondade.
Ryan Rodemoyer
@ Odys, desinstale e reinstale a extensão para corrigir o problema de Ctrl M + O.
Shahedur Rahman
21

Não conheço suplementos, mas você mencionou regiões e não vejo nada de errado em fazer algo assim ...

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: Em resposta à pergunta da EDIT: Você está certo, não é ideal fixar várias regiões em todos os lugares e refatorar é provavelmente o caminho a percorrer. Mas parece que você está procurando algo mágico que "organize" o código para você, e acho que não existe.

Kon
fonte
IIRC, você não pode definir regiões dentro de uma função.
Joel Coehoorn
10
o código dele está correto; você não está limitado a onde você pode definir regiões como essa (desde que não esteja terminando fora do escopo do início) #
John
3
Por favor, veja a edição da pergunta original; ação manual necessária por parte do desenvolvedor (mesmo usando um um-ou-de-dois, clique em atalho região-wrapping) realmente não responder à pergunta / desejo para que isso seja feito automaticamente
Grank
1
@ Joel Eu acredito que você está pensando de VB.NET
Bryan Anderson
Todos os plugins que você encontra vinculados neste segmento são melhores do que usar regiões. Noite e dia.
Glimpse
19

Você pode recolher blocos de texto específicos no visual studio, mas precisa desativar o contorno automático.

Clique com o botão direito do mouse na janela de código e selecione (Outlining | Stop Outlining)

Em seguida, selecione algum texto, clique com o botão direito do mouse e selecione (Esboço | Ocultar seleção)

Quando você ativa novamente o contorno automático, as "Regiões" personalizadas não serão mais recolhidas.

Matt Brunell
fonte
3
Justo. Espero encontrar nessa pergunta uma maneira de adicionar esses blocos ao esquema automático, pois não faz sentido que eles não o façam.
Grank
1
Matt, você pode fazer isso (no VS 2012) sem interromper o contorno automático. Basta selecionar texto e esboço> Hide Selection
Nawfal
3

O Visual Studio 2008 oferece suporte a regiões dentro de funções, desde que você as mantenha no mesmo nível hierá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
}
Chris Marisic
fonte
5
Isso não é novidade em 2008. 2005 também o suporta.
Kon Kon
3

Deixe-me dizer algo diferente: pressione (ctrl+m,ctrl+h)ou em editar> descrevendo> ocultar a seleção é tão útil.

M em
fonte
1
@ Mahdi, a pergunta era sobre a ferramenta que recolherá blocos de código. Você clica em alguma combinação e seus ifs, loops for / while etc. são todos recolhidos para que você possa ler seu código no nível mais alto possível. Então você iria mais fundo no código. Sua solução não é viável porque você precisaria primeiro recolher todas as regiões e não ver exatamente qual é a região. Boa sorte no futuro.
Roman
1
você pode primeiro comentário alguma coisa, então esconder sob este por isso é mais fácil e flexível
M em
0

Acrescentarei aqui que, no VS 2010, a Microsoft adicionou os recursos de adornadores WPF usando o MEF (Managed Extensibility Framework). Isso nos permitirá estender o editor de código-fonte para organizá-los de uma maneira muito melhor para torná-los mais legíveis e acessíveis.

Por exemplo, o visualizador de Comentários Resumidos que Scott Gu demonstrou no PDC 2008 .

Então, esperamos um amanhã melhor para os desenvolvedores :)

Vin
fonte
0

O Coderush descreverá todos os blocos de código para você. Não tenho certeza se ele permite expandir / recolher os blocos, mas descrever é a próxima melhor coisa. Eu uso o resharper em vez do coderush que, tanto quanto eu sei, não fornece o colapso do bloco :(

goku_da_master
fonte
0

No VS2017, você pode destacar uma seção do código, clicar com o botão direito do mouse em Outlining> Hide selection. Isso recolherá o código e alternará a seção destacada.

LoflinA
fonte
-2

# region, # endregion é a opção inteligente.


fonte
10
Regra StyleCop SA1123: DoNotPlaceRegionsWithinElements: Uma violação desta regra ocorre sempre que uma região é colocada dentro do corpo de um elemento de código. Em muitos editores, incluindo o Visual Studio, a região aparecerá recolhida por padrão, ocultando o código na região. Geralmente, é uma má prática ocultar o código no corpo de um elemento, pois isso pode levar a más decisões, pois o código é mantido ao longo do tempo.
21310 Sam Harwell