Неожиданное «выражение всегда верно» от Resharper при проверке нуля - PullRequest
0 голосов
/ 03 октября 2018

Рассмотрим следующую программу,

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?

-

Примечание: этот переключатель в середине уже переориентирован на что-то более разумное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...