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

时间:2010-08-25 14:37:22

标签: resharper resharper-5.0

question类似,但我的问题似乎在未经回答的评论中被问到。

我创建了一个C#类。我使用 alt - insert 添加构造函数。我在构造函数中添加一个参数,然后使用 alt - 输入来创建并初始化该参数中的字段,如下所示:

alt text

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

readonly int my_int;

如何告诉ReSharper不要将make my field添加为只读?我试图在ReSharper选项中做一个非常彻底的搜索,但显然我错过了一些东西!

3 个答案:

答案 0 :(得分:4)

我也找不到任何更改创建默认值的选项; 然而,如果你允许R#按照自己喜欢的方式创建这个字段(即readonly),稍后输入:

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

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

因此,本着'代码优先'的精神,你可能只想让R#做它的事情,并且当你真正需要它改变它时也用它来改变它(当然可能变成了...)

答案 1 :(得分:2)

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

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

您可以创建一个也派生自InitializeFieldFix的类,并包含一个以UnusedParameterWarningBase作为参数的构造函数。然后,您可以遵循与IntroduceFieldFix相同的实现,但为字段创建提供不同的模式,首先检查当前语言。

答案 2 :(得分:2)

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