Как я могу сказать ReSharper прекратить создание полей только для чтения? - PullRequest
5 голосов
/ 25 августа 2010

Этот вопрос похож, но мой вопрос, похоже, задается в оставленном без ответа комментарии.

Я создаю класс C #. Я использую alt - insert , чтобы добавить конструктор. Я добавляю аргумент в конструктор, а затем использую alt - , введите , чтобы создать и инициализировать поле из этого аргумента, например:

alt text

Проблема в том, что мое поле создается как поле readonly, и во многих случаях я не хочу создавать поле только для чтения.

readonly int my_int;

Как я могу сказать ReSharper не добавлять заставку для моего поля только для чтения? Я попытался сделать довольно тщательный поиск в настройках ReSharper, но, видимо, я что-то упустил!

Ответы [ 3 ]

4 голосов
/ 26 августа 2010

Я тоже не могу найти никакой опции, чтобы изменить создание по умолчанию; однако , если вы позволите R # создать это поле по своему усмотрению (то есть readonly), а затем введите следующее:

public void Bar(int baz)
{
    my_int = baz;
}

, тогда присваивание my_int получиткрасная волнистая линия подчеркивания, поскольку она недопустима, и предлагаемое быстрое исправление ( Alt + Enter ) в этом месте будет Make field 'my_int' non-readonly.

Так что вВ духе «сначала кода», вы можете просто позволить R # делать свое дело, а также использовать его, чтобы изменить его, как и когда вам это действительно нужно изменить (что, конечно, может оказаться никогда ...)

2 голосов
/ 24 мая 2014

Другой вариант может заключаться в использовании рефакторинга «Ввести поле». Лучший способ вызвать его - использовать «Refactor This» ( Ctrl + Shift + R ) в объявлении параметра и выбрать «Ввести поле» из уменьшено количество вариантов рефакторинга. По умолчанию он генерирует доступное для записи поле, но есть также возможность изменить модификаторы.

2 голосов
/ 25 октября 2013

Создание поля жестко запрограммировано для чтения только при создании. Идея состоит в том, что вы создаете поле, поэтому в нем нет использования по умолчанию для самого ограничительного, если вы попытаетесь записать его в другое место, вы можете нажать alt + enter в этом месте и удалить статус только для чтения. Если поле уже существует, ReSharper попытается инициализировать существующее поле из параметра.

Если вы хотите, вы можете написать плагин для генерации поля как не предназначенного только для чтения. Вы должны посмотреть на класс IntroduceFieldFix в dotPeek. У него есть несколько конструкторов, которые связывают быстрое исправление с предупреждающими надписями, и он вводит поле, используя шаблон по умолчанию для текущего языка (который жестко задан как "private readonly $0 $1;")

Вы можете создать класс, который также является производным от InitializeFieldFix и включает в себя конструктор, который принимает UnusedParameterWarningBase в качестве параметра. Затем вы можете следовать той же реализации, что и IntroduceFieldFix, но предоставить другой шаблон для создания поля, сначала проверяя текущий язык.

...