可空类型和ReSharper警告

Sar*_*els 7 c# resharper null nullable

我有以下代码:

private static LogLevel? _logLevel = null;

public static LogLevel LogLevel
{
    get
    {
        if (!_logLevel.HasValue)
        {
            _logLevel = readLogLevelFromFile();
        }

        return _logLevel.Value;
    }
}

private static LogLevel readLogLevelFromFile() { ... }
Run Code Online (Sandbox Code Playgroud)

我在return关于可能性的声明中得到了ReSharper警告System.InvalidOperationException,它建议我检查_logLevel它是否是null第一个.然而,readLogLevelFromFile回报LogLevel,没有LogLevel?,所以没有办法的return时候语句可以达成_logLevelnull.这只是ReSharper的疏忽,还是我错过了什么?

SLa*_*aks 5

这看起来像是Resharper中的一个错误.

但请注意,这不是线程安全的.

执行此操作的最佳方法是使用静态初始化程序,如下所示:

public static LogLevel Instance { get { return Nested.level; } }

class Nested {
    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Nested() { }

    internal static readonly LogLevel level = readLogLevelFromFile();
}
Run Code Online (Sandbox Code Playgroud)