2010-08-25 1 views
5

Это question похоже, но мой вопрос, кажется, задан в неотвеченном комментарии.Как я могу сказать ReSharper прекратить создавать поля только для чтения?

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

alt text

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

readonly int my_int; 

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

+0

Почему бы вам не назвать поля только для чтения? – DixonD

+2

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

+1

Согласен, я ненавижу это в resharper! Этот автоматический readonly просто загрязняет мой код большую часть времени. – andrecarlucci

ответ

4

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

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

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

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

2

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

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

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

+0

- вот что я и сделал. писать аддину не было пути, я хотел спуститься – Simon

+0

там действительно должна быть возможность выключить это – Simon

2

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

+0

Это работает точно так, как я хочу. –

 Смежные вопросы

  • Нет связанных вопросов^_^