2017-10-19 103 views
1

我用NDepend的審查一些代碼,我幾年時間前寫,我結束了這條警告避免非只讀的靜態字段規則

enter image description here

的警告以下簡稱snippt

private static char csvSeparator; 

    public static char CsvSeparator => csvSeparator != Char.MinValue 
     ? csvSeparator 
     : (csvSeparator = 
      ServiceStack.ServiceStackHost.Instance.AppSettings.Get("csv_separator", ';')); 

這段代碼基於的想法是,我在app.config中定義了分隔符,那麼這個對於整個應用程序生命週期將是相同的。我的代碼讀取它,然後存儲在一個靜態變量中供將來使用。該應用程序是一個用高頻CSV文件創建的控制檯,所以我不想浪費時間從配置文件中讀取它,每次需要時。

您能否爲我提供該警告的解決方案? 在此先感謝

回答

1

爲避免你應該確保在靜態字段csvSeparator場僅由類的類的構造方法分配任何問題。通過這種方式,您不僅可以將您的字段設置爲readonly,而且規則也不會再發出警告。

static YourClassName() { 
    // csvSeparator gets assigned 
    csvSeparator = csvSeparator != Char.MinValue 
     ? csvSeparator 
     : (csvSeparator = ServiceStack.ServiceStackHost.Instance.AppSettings.Get("csv_separator", ';')); 
} 

private static readonly char csvSeparator; 

public static char CsvSeparator => csvSeparator; 

,或者您也可以使用支持字段和自動屬性getter

+0

對不起,你的意思是支持域和自動屬性獲取 – advapi

0

原諒我,如果我不發表評論,但因爲我需要粘貼代碼,我不能評論做這樣......順便說一句這個解決方案應該也能工作(並且我不需要一個私人道具)

public static readonly char CsvSeparator; 
static Helper() 
    { 
     CsvSeparator = ServiceStack.ServiceStackHost.Instance.AppSettings.Get("csv_separator", ';'); 
    }