2010-08-25 72 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