Звернення Visual Studio C # руйнується


180

Під час редагування дійсно довгих блоків коду (який, безумовно, має бути відновлено у будь-якому разі, але це виходить за рамки цього питання), я часто прагну до можливості згортання блоків операторів, як можна зруйнувати функціональні блоки. Тобто, було б чудово, якби значок мінус з’явився в контурному коді для всього, що міститься в дужках. Здається, це з'являється для функцій, класів, регіонів, просторів імен, ужинків, але не для умовних або ітеративних блоків. Було б фантастично, якби я міг зруйнувати такі речі, як ifs, перемикачі, передбачення, такі речі!

Поглибившись у це трохи, я виявив, що, очевидно, контур C ++ у VS дозволяє це, але контур C # у VS цього не робить. Я не розумію чому. Навіть блокнот ++ стане таким, що згортається, якщо я виберу формат C #, тому я не розумію, чому Visual Studio цього не робить.

Хтось знає про надбудову VS2008, яка дозволить цю поведінку? Або якесь приховане налаштування для цього?

Відредаговано, щоб додати: вставляти регіони, звичайно, є варіантом, і мені це вже траплялося, але, чесно кажучи, мені не слід було б загортати речі в регіон, який уже загорнутий в дужки ... якби я збирався редагувати існуючий код, я б просто змінив його, щоб все-таки краще розділити питання. ("обгортання" новими методами замість регіонів;)


6
BTW: Я виявив, що ці два ярлики зробили моє життя дуже легким: Переключити контур: Ctrl + M, M Згорнути все: Ctrl + M, O
Gaurav

2
Ctrl + M, L перемикає рекурсивний згортання / розширення. Звичайно, це може залишити вас єдиним рядком. Всередині цього рядка (Ctrl + M, M) залишає вас добре зібраний файл.
патрон

2
Ось еквівалентний плагін для VS 2012: stackoverflow.com/questions/18388280/…
Glimpse

пов'язані: Проблема зі складанням коду Джеффом Етвудом, 2008 р.
Нік Алексєєв

Відповіді:


267

Починаючи з Visual Studio 2017, вбудований випадок вбудований.

Існує кілька розширень, які виконують це завдання для версій VS до 2017 року, починаючи з версії VS 2010:

Останнє розширення підтримує лише VS 2015 та VS 2017, але це найпотужніше.
Він підтримує синтаксичне забарвлення всередині згорнутих блоків, він більш стійкий до відмов і оптимізований.

Якщо розширення не встановлено після використання браузера для його завантаження, спробуйте скористатися вбудованим менеджером розширень Visual Studio.


Це чудово, я так довго шукав щось подібне. Повинна бути справжня відповідь! (Але тільки якщо ви використовуєте неекспрес-видання VS2010, я думаю ...)
rikoe

Це розширення чудово, але воно не працює на обробниках (.ashx)
Jemsworld


3
Той факт, що нам навіть потрібен цей плагін для Visual Studio, викликає сумніви. Це має бути стандартна поведінка. Добро.
Райан Родемойер

@Odys, видаліть та повторно встановіть розширення, щоб виправити проблему Ctrl M + O.
Шахедур Рахман

21

Мені невідомі додатки, але ви згадали регіони, і я не бачу нічого поганого в тому, щоб зробити щось подібне ...

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: У відповідь на питання EDIT: Ви маєте рацію, приклеювати купу регіонів скрізь не є ідеальним, і рефакторинг - це, мабуть, шлях. Але здається, що ви шукаєте щось магічне, яке "організує" код для вас, і я не думаю, що це існує.


IIRC, ви не можете визначити регіони функції.
Джоель Куехорн

10
його код правильний; Ви не обмежуєтесь тим, де Ви можете визначити такі регіони (доки Ви не закінчуєтесь поза рамками початку)
Іван

3
Перегляньте редагування оригінального питання; ручні дії, необхідні розробнику (навіть за допомогою ярлика для регіону, що
обертає

1
@Joel Я вважаю, що ти думаєш про VB.NET
Брайан Андерсон

Усі плагіни, які ви знайдете в цьому потоці, кращі, ніж використання регіонів. Ніч і день.
Glimpse

19

Ви можете згортати певні блоки тексту у візуальній студії, але вам потрібно вимкнути автоматичне окреслення.

Клацніть правою кнопкою миші у вікні коду та виберіть (Накреслення | Зупинити контур)

Потім виберіть текст, клацніть правою кнопкою миші та виберіть (Контур | Приховати вибір)

Якщо ви знову ввімкнете автоматичне окреслення, ваші користувацькі "регіони" більше не будуть руйнуватися.


3
Досить справедливо. Я сподіваюся знайти через це запитання спосіб додати ці блоки до автоматичного окреслення, хоча це насправді не має сенсу.
Grank

1
Метт, ти можеш це зробити (у VS 2012), не припиняючи автоматичного окреслення. Просто виберіть текст і
окресліть

3

Visual Studio 2008 підтримує регіони всередині функцій, якщо ви зберігаєте їх у тому ж ієрархічному рівні коду

#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
Це не є новим у 2008 році. 2005 також підтримує це.
Кон

3

Дозвольте сказати щось інше (ctrl+m,ctrl+h).


1
@Mahdi питання стосувалося інструменту, який згортає блоки коду. Ви клацаєте якусь комбінацію, і ваші ifs, цикли для / while і т. Д. Всі згортаються, щоб ви могли прочитати свій код на найвищому рівні. Тоді ви заглибитеся в код. Ваше рішення нежиттєздатне, тому що вам доведеться спочатку розвалити всі регіони, і ви не бачите, який саме регіон саме є. Успіхів у майбутньому.
Роман

1
ви можете спочатку прокоментувати щось, а потім сховатися під цим, щоб це було легше і гнучкіше
M

2

Ця функція була додана до редактора C # Visual Studio 2010. Я не можу знайти джерело, яке б підтверджувало, що воно фактично було вкладено, але я пам’ятаю, що бачив його в одному з блогів учасників команди Dev 10, який розповідав про зміни після бета-версії 1 або щось подібне. Як втіху, ось один коментар Microsoft, який припускає, що вони хочуть додати його.


0

Я додам тут, що у VS 2010 Microsoft додала можливості WPF-прикрасника за допомогою керованої програми розширення (MEF), це дозволить нам розширити редактор вихідного коду, щоб організувати їх набагато кращим чином, щоб зробити його більш читабельним та доступним.

Наприклад, візуалізатор підсумкових коментарів, який демонстрував Скотт Гу на PDC 2008 .

Тож чекайте кращого завтра для розробників :)


0

Coderush окреслить всі блоки коду для вас. Не впевнений, чи дозволяє він розширювати / згортати блоки, але окреслення - це найкраще. Я використовую resharper замість coderush, який, наскільки я знаю, не забезпечує згортання блоку :(


0

Я знайшов це для Visual Studio 2013 і вважав це дуже корисним. Це працює навіть у тому випадку, якщо ви поставите прості дужки навколо коду за допомогою {.....}

Після обміну я знайшов, що хтось ще також згадав це посилання. Моє голосування також за цей інструмент.

Інструмент контуру C # для Visual Studio 2013


0

У VS2017 ви можете виділити розділ коду, клацніть правою кнопкою миші Визначення> Сховати вибір. Це зруйнує код і надасть перемикання на виділений розділ.


-2

# регіон, # endregion - це розумний варіант.


10
Правило StyleCop SA1123: DoNotPlaceRegionsWithinElements: Порушення цього правила відбувається щоразу, коли область розміщена в тілі елемента коду. У багатьох редакторах, включаючи Visual Studio, область буде видана згорнутою за замовчуванням, приховуючи код у межах регіону. Як правило, погана практика приховувати код в тілі елемента, оскільки це може призвести до неправильних рішень, оскільки код підтримується з часом.
Сем Харвелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.