避免使用非只读静态字段规则

时间:2017-10-19 08:36:44

标签: csv ndepend

我正在使用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文件创建的控制台,所以我不想浪费时间在每次需要时从配置文件中读取它

您能否为我提供该警告的解决方案? 提前致谢

2 个答案:

答案 0 :(得分: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;

或者您也可以使用支持字段和自动属性获取器

答案 1 :(得分:0)

对不起,如果我不评论,但因为我需要粘贴代码我不能做评论...顺便说一下,这个解决方案也应该有用(我不需要私人道具)

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