避免非只读静态字段规则

Avoid non-readonly static fields Rule

我正在使用 NDepend 审查我不久前写的一些代码,但我收到了这个警告

警告在以下片段中引用

    private static char csvSeparator;

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

这段代码基于的想法是我在 app.config 中定义了一个分隔符,然后这个分隔符在整个应用程序生命周期内都是相同的。我的代码读取它,然后将其存储在一个静态变量中以供将来使用 use.This 应用程序是一个使用高频 CSV 文件创建的控制台,所以我不想每次都浪费时间从配置文件中读取它需要它

你能为我提供解决该警告的方法吗? 提前致谢

为避免任何问题,您应该确保静态字段 csvSeparator 字段仅由 [=19] 的 class 构造方法 分配=].这样,您不仅可以将字段设置为 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

对不起,如果我不发表评论,但由于我需要粘贴代码,所以我不能发表评论...顺便说一句,这个解决方案也应该有效(而且我不需要私人道具)

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