Как настроить форматирование кода, создаваемого "Encapsulate Field"?

Раньше я довольно уверен, что команда "Encapsulate Field" будет выглядеть примерно так:

public int SomeNumber;

в следующее (что я хочу из VS 2015):

private int someNumber;

public int SomeNumber {
    get { return someNumber; }
    set { someNumber = value; }
}

но в Visual Studio 2015 я вижу следующее:

private int someNumber;

public int SomeNumber {
    get {
        return someNumber;
    }

    set {
        someNumber = value;
    }
}

Есть ли способ исправить это?

Ответы

Ответ 1

Это было изменение дизайна в VS2015. В предыдущих версиях команда refactoring обратила внимание на параметр "Инструменты" > "Параметры" > "Редактор текста" > "С#" > "Обтекание" > "Оставить блок в одной строке". С его включением вы получите свойство getter и setter body так, как оно закодировано в фрагменте, скобки на той же линии. Как вам это нравится.

В VS2015, в отличие от VS2015, теперь обращается внимание на настройку Инструменты > Параметры > Текстовый редактоp > С# > Форматирование > Новые линии > "Установить открытую скобку в новой строке для методов". Вы можете выбирать между "египетскими" брекетами или раздельными раскладками. Ни один из них вам не нравится.

Несчастные случаи случаются, когда Microsoft создает новые версии VS, это не случайно. Независимо от того, было ли это сделано "популярным спросом", сложно перепроектировать, я считаю это довольно вероятным, поскольку этот рефакторинг обычно делается для того, чтобы писать нетривиальный геттер или сеттер, который не подходит для одной строки. Предоставление нам выбора между всеми тремя возможными предпочтениями форматирования выглядит как проблема для меня, существующие параметры форматирования не соответствуют друг другу.

Только реальная опция - сообщить Microsoft, что вы не довольны изменениями. Существует существующая статья UserVoice, в которой предлагается изменение. Вы можете проголосовать за нее или написать свой собственный. Отправьте ссылку на нее в своем вопросе, чтобы другие пользователи SO могли голосовать.

Ответ 2

Это поможет вам:
-Подробнее сканирование полей (С#): https://msdn.microsoft.com/en-us/library/a5adyhe9.aspx

Этот веб-сайт, кажется, предлагает решение в конце темы.

Проверьте также этот пост: -Different Стиль рефакторинга для инкапсуляции полей: как заставить Visual Studio изменить его? Разный стиль рефакторинга для инкапсуляции полей: как заставить Visual Studio изменить его?

Этот вопрос соответствует вашему вопросу определенным образом: вопрос действительно связан с вашим:)

Ответ 3

Я сам попытался изменить файл фрагмента на набор моего файла, но VS не вступает в силу. То, что я делаю, это

  1. Инкапсулируйте поля как обычно.
  2. Скопируйте и вставьте код в notepad++ и выполните поиск и замену.

Найти:

(\{)*(\s*)*(get|set)\r\n\s+{\r\n\s+(.*)\r\n\s+\}\s+

Заменить:

$1$3\{$4\}
  1. Вставьте результат обратно в VS. VS отформатирует его, следуя за блоком "Оставить на одной строке".