Рассмотрим следующую программу,
class Foo
{
public string Score { get; set; }
}
class Program
{
static Foo GetFoo(int x) => x < 0 ? null : new Foo {Score = x > 100 ? $"{x}": "^"};
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var foo = GetFoo(-2);
switch (foo?.Score)
{
case string s when int.TryParse(s, out _):
Console.WriteLine("Score exists");
break;
case null:
break;
}
if (!int.TryParse(foo?.Score, out _))
{
Console.WriteLine(foo.Score);
}
}
}
При выполнении NullReferenceException
выбрасывается на Console.WriteLine(foo.Score)
, поскольку foo
равно нулю.
Когда if
изменяется на
if (foo != null && !int.TryParse(foo?.Score, out _))
ReSharper 2018.2.3 сообщает, что foo != null
всегда истинно.Я что-то здесь упускаю или это дефект в ReSharper?
-
Примечание: этот переключатель в середине уже переориентирован на что-то более разумное.