如何告诉ReSharper停止创建只读字段?

5
这个问题与这个类似,但我的问题似乎在一个未回答的评论中被问到。
我创建了一个C#类。我使用alt-insert添加构造函数。我向构造函数添加一个参数,然后我使用alt-enter从该参数创建并初始化一个字段,如下所示:

alt text

问题是我的字段被创建为只读字段,在许多情况下我不想创建只读字段。
readonly int my_int;

我该如何告诉ReSharper不要将我的字段设为只读呢?我已经在ReSharper选项中进行了详尽的搜索,但显然我漏掉了什么!


为什么你不想把字段命名为只读? - DixonD
2
因为最终这个字段并不打算是只读的。在某些情况下,确实需要只读。但是此时我刚刚引入了该字段,并希望它不要被创建为只读。 - Chris Farmer
1
我同意,我也讨厌Resharper中的这个功能!自动添加“只读”关键字常常会破坏我的代码。 - andrecarlucci
3个回答

4

我也找不到更改创建默认值的选项;然而,如果您允许 R# 自己创建该字段(例如 readonly),然后稍后键入以下内容:

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

如果将值分配给my_int,它将被标记为非法,并且该位置提供的快速修复(Alt+Enter)将是Make field 'my_int' non-readonly

所以按照“先写代码”的精神,您可能希望让R#自己处理这个问题,并在实际需要更改时使用它来进行更改(当然可能根本不需要更改...)


2
另外一种选择可能是使用“引入字段”重构。最好的调用方法是在参数声明上使用“重构此”(Ctrl+Shift+R),并从缩小的重构选项中选择“引入字段”。默认情况下,它将生成可写字段,但也有一个选项可以更改修饰符。

2
该字段在创建时被硬编码为只读。这是因为您正在创建一个字段,所以它没有任何用途可以默认为最严格的状态。如果您尝试在其他地方写入它,可以在那时按 alt+enter 并删除只读状态。如果该字段已经存在,则 ReSharper 将尝试从参数初始化现有字段。
如果您想要,可以编写一个插件将该字段生成为非只读。您应该查看 dotPeek 中的 IntroduceFieldFix 类。它有几个构造函数,将快速修复绑定到警告波浪线,并使用当前语言的默认模式(硬编码为“private readonly $0 $1;”)引入一个字段。
您可以创建一个类,该类也派生自 InitializeFieldFix,并包括一个以 UnusedParameterWarningBase 作为参数的构造函数。然后,您可以按照 IntroduceFieldFix 的相同实现方式进行操作,但首先检查当前语言并提供不同的字段创建模式。

那也是我的结论。编写插件不是我想要走的路。 - Simon
真的应该有一个选项来关闭这个。 - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接