2010-08-25 74 views
5

这个question是相似的,但我的问题似乎被问了一个未答复的评论。如何让ReSharper停止创建只读字段?

我创建了一个C#类。我使用alt - insert添加构造函数。我想补充的一个参数的构造函数,然后我用ALT - 进入创建并从参数初始化一个领域,像这样:

alt text

的问题是,我的领域被作为创建一个readonly字段,并且在很多情况下我不想创建只读字段。

readonly int my_int; 

如何让ReSharper不添加使我的字段只读?我试图在ReSharper选项中做一个非常彻底的搜索,但显然我错过了一些东西!

+0

为什么你不想只读字段? – DixonD 2010-08-25 14:47:16

+2

因为最终这个字段不是只读的。在某些情况下,当然,我想只读。但是在这一点上,我刚刚介绍了该领域,并且宁愿不将其创建为只读。 – 2010-08-25 14:49:50

+1

我同意,我讨厌在resharper!这种自动读取只会在大多数时间污染我的代码。 – andrecarlucci 2011-06-23 22:19:21

回答

4

我也找不到任何选项来更改创建默认值; 然而,如果你让R·为它喜欢(即readonly)创建这个领域,后来又输入:

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

然后分配给my_int会得到一个红色波浪下划线,因为它是非法的,并提供快速修复(替代 + 输入)在该位置将为Make field 'my_int' non-readonly

所以本着'代码优先'的精神,你可能想让R#做它的事情,并用它来改变它,当你真正需要它改变(当然这可能是从来没有...)

2

该字段的创建是硬编码的只读创建。这个想法是,你正在创建一个字段,所以它没有任何用法来默认为最严格的,如果你尝试在其他地方写入,你可以在该点上输入+并删除只读状态。如果该字段已存在,ReSharper将尝试初始化参数中的现有字段。

如果你想,你可以编写一个插件来生成非只读字段。你应该看看dotPeek中的IntroduceFieldFix类。它有几个构造函数,它将快速修复绑定到警告信息,它将引入一个使用当前语言默认模式的字段(它被硬编码为“private readonly $0 $1;”)

您可以创建一个类,从InitializeFieldFix,并包括一个构造函数,它需要UnusedParameterWarningBase作为参数。然后,您可以按照与IntroduceFieldFix相同的实现方式进行操作,但为字段创建提供了不同的模式,首先检查当前语言。

+0

这也是我的结论。写一个插件是不是我想要去的路径 – Simon 2013-10-25 10:32:19

+0

应该真的有一个选项可以关闭这个 – Simon 2015-06-03 05:07:51

2

另一种选择可能是使用'导入字段'重构。调用它的最好方法是使用'Refactor This'(Ctrl + Shift + R)对参数声明并从减少的重构选项中选择'导入字段'。默认情况下,它将生成可写字段,但也可以选择更改修饰符。

+0

这工作完全像我想要的。 – 2014-10-07 14:16:00