Réduire l'instruction Visual Studio C #


180

Lors de l'édition de blocs de code très longs (qui devraient de toute façon être refactorisés, mais cela dépasse le cadre de cette question), je désire souvent avoir la possibilité de réduire les blocs d'instructions comme on peut réduire les blocs fonctionnels. Autrement dit, ce serait génial si l'icône moins apparaissait sur le contour du code pour tout ce qui est entre accolades. Il semble apparaître pour les fonctions, classes, régions, espaces de noms, utilisations, mais pas pour les blocs conditionnels ou itératifs. Ce serait fantastique si je pouvais faire tomber des choses comme des ifs, des interrupteurs, des foreaches, ce genre de choses!

En googlant un peu là-dessus, j'ai découvert qu'apparemment, la présentation C ++ dans VS le permettait, mais la présentation C # dans VS ne le permettait pas. Je ne comprends pas vraiment pourquoi. Même notepad ++ le fera donc s'effondrer si je sélectionne le formatage C #, donc je ne comprends pas pourquoi Visual Studio ne le fait pas.

Quelqu'un connaît-il un complément VS2008 qui activera ce comportement? Ou une sorte de paramètre caché pour cela?

Edité pour ajouter: l'insertion de régions est bien sûr une option et cela m'est déjà venu à l'esprit, mais franchement, je ne devrais pas avoir à envelopper des choses dans une région qui sont déjà entourées d'accolades ... si j'allais éditer le code existant, je voudrais juste le refactoriser pour avoir une meilleure séparation des préoccupations de toute façon. ("wrapping" avec de nouvelles méthodes au lieu de régions;)


6
BTW: J'ai trouvé que ces deux raccourcis me rendaient la vie très facile: Basculer le contour: Ctrl + M, M Réduire tout: Ctrl + M, O
Gaurav

2
Ctrl + M, L bascule un repli / développement récursif. Bien sûr, cela peut vous laisser avec une seule ligne. À l'intérieur de cette ligne, cependant (Ctrl + M, M) vous laisse un fichier bien résumé.
patridge

2
Voici un plugin équivalent pour VS 2012: stackoverflow.com/questions/18388280/…
Glimpse

en relation: Le problème avec le pliage de code par Jeff Atwood, 2008
Nick Alexeev

Réponses:


267

À partir de Visual Studio 2017, la réduction des instructions est intégrée.

Il existe plusieurs extensions qui effectuent cette tâche pour les versions antérieures à 2017 de VS, à partir de la version VS 2010:

La dernière extension ne prend en charge que VS 2015 et VS 2017, mais c'est la plus puissante.
Il prend en charge la coloration syntaxique à l'intérieur des blocs réduits, il est plus tolérant aux pannes et optimisé.

Si l'extension ne semble pas s'installer après avoir utilisé un navigateur pour la télécharger, essayez d'utiliser le gestionnaire d'extensions Visual Studio intégré.


C'est génial, je cherchais quelque chose comme ça depuis si longtemps. Ça devrait être la vraie réponse! (Mais seulement si vous utilisez l'édition non express de VS2010, je suppose ...)
rikoe

Cette extension est géniale mais elle ne fonctionne pas sur les gestionnaires (.ashx)
Jemsworld


3
Le fait que nous ayons même besoin de ce plugin pour Visual Studio est ahurissant. Cela devrait être un comportement standard. La bonté.
Ryan Rodemoyer

@Odys, désinstallez puis réinstallez l'extension pour résoudre le problème Ctrl M + O.
Shahedur Rahman

21

Je ne connais pas les compléments, mais vous avez mentionné des régions et je ne vois rien de mal à faire quelque chose comme ça ...

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: En réponse à la question EDIT: Vous avez raison, coller un tas de régions partout n'est pas idéal et la refactorisation est probablement la voie à suivre. Mais il semble que vous cherchez quelque chose de magique qui "organisera" le code pour vous, et je ne pense pas que cela existe.


IIRC, vous ne pouvez pas définir de régions dans une fonction.
Joel Coehoorn

10
son code est correct; vous n'êtes pas limité à l'endroit où vous pouvez définir des régions comme celle-ci (tant que vous ne
Jean

3
Veuillez consulter la modification de la question d'origine; l'action manuelle requise de la part du développeur (même en utilisant un raccourci d'enroulement de région en un ou deux clics) ne répond pas vraiment à la question / au désir que cela soit fait automatiquement
Grank

1
@Joel Je crois que vous pensez à VB.NET
Bryan Anderson

Tous les plugins que vous trouvez liés dans ce fil sont meilleurs que l'utilisation de régions. Nuit et jour.
Glimpse

19

Vous pouvez réduire des blocs de texte spécifiques dans Visual Studio, mais vous devez désactiver le contour automatique.

Faites un clic droit dans votre fenêtre de code et sélectionnez (Outlining | Stop Outlining)

Ensuite, sélectionnez du texte, faites un clic droit et sélectionnez (Contour | Masquer la sélection)

Lorsque vous réactivez la mise en évidence automatique, vos «régions» personnalisées ne se réduisent plus.


3
C'est suffisant. J'espère trouver à travers cette question un moyen d'ajouter ces blocs à la description automatique, car cela n'a pas vraiment de sens pour eux de ne pas l'être.
Grank

1
Matt, vous pouvez le faire (dans VS 2012) sans arrêter le contour automatique. Il suffit de sélectionner le texte et le contour> masquer la sélection
nawfal

3

Visual Studio 2008 prend en charge les régions à l'intérieur des fonctions tant que vous les conservez dans le même niveau hiérarchique de code

#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
Ce n'est pas nouveau en 2008. 2005 le soutient également.
Kon

3

Permettez-moi de dire quelque chose de différent: appuyez sur (ctrl+m,ctrl+h)ou dans Modifier> Décrire> Masquer la sélection, c'est si utile.


1
@Mahdi la question portait sur l'outil qui réduira les blocs de code. Vous cliquez sur une combinaison et vos ifs, boucles for / while, etc. sont tous réduits afin que vous puissiez lire votre code au plus haut niveau possible. Ensuite, vous approfondiriez le code. Votre solution n'est pas viable car vous devrez d'abord réduire toutes les régions et vous ne voyez pas de quelle région il s'agit exactement. Bonne chance pour la suite.
Roman

1
vous pouvez d'abord commenter quelque chose puis vous cacher sous celui-ci pour que ce soit plus facile et flexible
M


0

J'ajouterai ici que dans VS 2010, Microsoft a ajouté des fonctionnalités WPF adorner à l'aide du Managed Extensibility Framework (MEF), cela nous permettra d'étendre l'éditeur de code source pour les organiser d'une bien meilleure manière pour le rendre plus lisible et accessible.

Par exemple, le visualiseur Summary Comments que Scott Gu a présenté à PDC 2008 .

Alors attendons avec impatience un avenir meilleur pour les développeurs :)


0

Coderush décrira tous les blocs de code pour vous. Je ne sais pas si cela vous permet d'agrandir / réduire les blocs, mais le tracé est la meilleure chose à faire. J'utilise resharper au lieu de coderush qui, pour autant que je sache, ne permet pas non plus de réduire les blocs :(


0

J'ai trouvé cela pour Visual Studio 2013 et je l'ai trouvé très utile. Cela fonctionne même si vous mettez de simples accolades autour de votre code avec {.....}

Après le partage, j'ai trouvé que quelqu'un d'autre a également mentionné ce lien. Mon vote est également pour cet outil.

Outil de présentation C # pour Visual Studio 2013


0

Dans VS2017, vous pouvez mettre en surbrillance une section de code, cliquez avec le bouton droit sur Contour> Masquer la sélection. Cela réduira le code et fournira une bascule à la section en surbrillance.


-2

# region, # endregion est l'option intelligente.


10
Règle StyleCop SA1123: DoNotPlaceRegionsWithinElements: une violation de cette règle se produit chaque fois qu'une région est placée dans le corps d'un élément de code. Dans de nombreux éditeurs, y compris Visual Studio, la région apparaîtra réduite par défaut, masquant le code dans la région. C'est généralement une mauvaise pratique de cacher du code dans le corps d'un élément, car cela peut conduire à de mauvaises décisions car le code est maintenu au fil du temps.
Sam Harwell
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.