nullable type and a ReSharper warning

寵の児 提交于 2019-12-05 05:20:51

That looks like a bug in Resharper.

Note, however, that that isn't thread-safe.

The best way to do this is to use a static initializer, like this:

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();
}

You could refactor it into something like this:

return (_logLevel = _logLevel ?? readLogLevelFromFile()).Value;

Alternatively you can use the built in lazy type (Requires .NET 4.0 or you can roll your own.):

public static LogLevel LogLevel
{
    get { return _logLevel.Value; }
}
private static Lazy<LogLevel> _logLevel = new Lazy<LogLevel>(readLogLevelFromFile);

Resharper wasn't 'smart' enough to figure it out for you. It is kind of a complex thing to figure out, I would imagine.

I prefer @ChaosPandion's refactoring anyways...

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!