I have the following code:
private static LogLevel? _logLevel = null;
public static LogLevel LogLevel
{
get
{
if (!_logLevel.HasValue)
{
_logLevel = readLogLevelFromFile();
}
return _logLevel.Value;
}
}
private static LogLevel readLogLevelFromFile() { ... }
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?
You could refactor it into something like this:
Alternatively you can use the built in lazy type (Requires .NET 4.0 or you can roll your own.):
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...
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: