可空类型和ReSharper的警告 [英] nullable type and a ReSharper warning
问题描述
我有以下代码:
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屋!