可空类型和ReSharper的警告 [英] nullable type and a ReSharper warning

查看:208
本文介绍了可空类型和ReSharper的警告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

private static LogLevel? _logLevel = null;

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

        return _logLevel.Value;
    }
}

private static LogLevel readLogLevelFromFile() { ... }

$ B $关于b

我得到了回报ReSharper的警告语句可能 System.InvalidOperationException 和它表明我检查 _logLevel 来看看它是第一个。然而, readLogLevelFromFile 收益的LogLevel ,而不是 LogLevel的?,所以有没有办法在收益语句可以达成当 _logLevel 。这只是由ReSharper的一个疏忽,还是我失去了一些东西?

I get a ReSharper warning on the return statement about a possible System.InvalidOperationException and it suggests I check _logLevel to see if it is null first. However, readLogLevelFromFile returns LogLevel, not LogLevel?, so there is no way the return statement could be reached when _logLevel is null. Is this just an oversight by ReSharper, or am I missing something?

推荐答案

这看起来像ReSharper的一个bug。

That looks like a bug in Resharper.

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

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

要做到这一点,最好的方法是使用一个静态初始化,像这样的:

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

这篇关于可空类型和ReSharper的警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆