Visual Studio C # оператор рушится


180

При редактировании действительно длинных блоков кода (которые в любом случае должны быть реорганизованы, но это выходит за рамки этого вопроса), я часто мечтаю о возможности свернуть блоки операторов, как можно свернуть функциональные блоки. То есть было бы замечательно, если бы в схеме кода появился значок минус для всего, что заключено в фигурные скобки. Похоже, он появляется для функций, классов, областей, пространств имен, использования, но не для условных или итеративных блоков. Было бы замечательно, если бы я мог свернуть такие вещи, как ifs, switch, foreach, такие вещи!

Погуглив немного, я обнаружил, что, очевидно, выделение C ++ в VS позволяет это, а выделение C # в VS - нет. Я действительно не понимаю, почему. Даже Notepad ++ будет так, что эти сбои, если я выберу форматирование C #, поэтому я не понимаю, почему Visual Studio этого не делает.

Кто-нибудь знает надстройку VS2008, которая включит это поведение? Или какая-то скрытая установка для этого?

Отредактировано, чтобы добавить: вставка областей, конечно, вариант, и это уже пришло мне в голову, но, честно говоря, мне не нужно было оборачивать вещи в области, которые уже заключены в фигурные скобки ... если я собирался редактировать существующий код, я бы просто реорганизовал его для лучшего разделения проблем в любом случае. («обертывание» новыми методами вместо регионов;)


6
Кстати, я обнаружил, что эти два ярлыка сделали мою жизнь очень простой: переключить контур: Ctrl + M, M Свернуть все: Ctrl + M, O
Gaurav

2
Ctrl + M, L переключает рекурсивное свертывание / расширение. Конечно, это может оставить вас в одной строке. Тем не менее, внутри этой строки (Ctrl + M, M) у вас есть хорошо резюмированный файл.
патрон

2
Вот эквивалентный плагин для VS 2012: stackoverflow.com/questions/18388280/…
Glimpse

Ответы:


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
}

РЕДАКТИРОВАТЬ: В ответ на вопрос РЕДАКТИРОВАТЬ: Вы правы, наклеивание группы регионов везде не идеально, и рефакторинг, вероятно, путь. Но кажется, что вы ищете что-то волшебное, что "организует" код для вас, и я не думаю, что оно существует.


IIRC, вы не можете определить регионы внутри функции.
Джоэл Коухорн

10
его код правильный; вы не ограничены тем, где вы можете определить такие регионы (если вы не заканчиваете вне рамок начала)
Джон

3
Пожалуйста, смотрите редактирование исходного вопроса; ручное действие, требуемое со стороны разработчика (даже с использованием ярлыка обтекания области одним или двумя
щелчками

1
@ Джоэл Я полагаю, вы думаете о VB.NET
Брайан Андерсон

Все плагины, которые вы найдете в этой теме, лучше, чем использование регионов. Ночь и день.
Взгляд

19

Вы можете свернуть определенные блоки текста в пределах Visual Studio, но вам нужно отключить автоматическое выделение.

Щелкните правой кнопкой мыши в окне кода и выберите (Outlining | Stop Outlining)

Затем выделите какой-нибудь текст, щелкните правой кнопкой мыши и выберите (Outlining | Hide Selection)

Когда вы снова включите автоматическое выделение, ваши пользовательские «Регионы» больше не будут разрушаться.


3
Справедливо. Я надеюсь найти в этом вопросе способ добавить эти блоки в автоматическое выделение, хотя для них не имеет смысла не делать этого.
Гранк

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
@ Махди, вопрос был об инструменте, который свернет блоки кода. Вы нажимаете какую-то комбинацию, и все ваши if, циклы for / while и т. Д. Свернуты, чтобы вы могли прочитать свой код на максимально возможном уровне. Тогда вы углубитесь в код. Ваше решение не является жизнеспособным, потому что вам придется сначала свернуть все регионы, и вы не увидите, какой именно это регион. Удачи в будущем.
Роман

1
Вы можете сначала что-то прокомментировать, а затем спрятать под этим, чтобы это было проще и гибче
М в

2

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


0

Здесь я добавлю, что в VS 2010 Microsoft добавила возможности WPF adorner, используя Managed Extensibility Framework (MEF), это позволит нам расширить редактор исходного кода, чтобы упорядочить его, сделав его более читабельным и доступным.

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

Так что с нетерпением ждем лучшего будущего для разработчиков :)


0

Coderush обрисует все блоки кода для вас. Не уверен, что это позволяет вам расширять / сворачивать блоки, но выделение является следующей лучшей вещью. Я использую Resharper вместо Coderush, который, насколько я знаю, также не обеспечивает свертывание блоков :(


0

Я нашел это для Visual Studio 2013 и нашел его очень полезным. Это работает, даже если вы ставите простые скобки вокруг кода с помощью {.....}

После обмена я нашел кого-то еще, также упомянул эту ссылку. Мой голос также за этот инструмент.

Инструмент выделения C # для Visual Studio 2013


0

В VS2017 вы можете выделить часть кода, щелкнуть правой кнопкой мыши, Outlining> Hide selection. Это свернет код и обеспечит переключение на выделенный раздел.


-2

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


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