Предупреждение ReSharper для возможного исключения System.NullReferenceException, несмотря на неявную проверку NULL - PullRequest
0 голосов
/ 30 августа 2018

Я получаю предупреждение ReSharper (2018.1) для Possible 'System.NullReferenceException', когда я неявно проверяю ноль с помощью if (obj) вместо if (obj ! = null).

Например:

using JetBrains.Annotations;
using UnityEngine.UI;

public class CanBeNullTest : MonoBehaviour
{
    [CanBeNull] public Button Button { get; set; }

    private void EnableButton_explicitCheck()
    {
        if (Button != null) Button.enabled = true;
    }

    private void EnableButton_implicitCheck()
    {
        if (Button) Button.enabled = true;
    }

    //private void EnableButton_cSharp6()
    //{
    //    // null propagating operator is not available in C# 4
    //    Button?.enabled = true;
    //}
}

Только неявная проверка нуля показывает предупреждение ReSharper:

ReSharper-null-check-warning

Я посмотрел на страницу ReSharper для «Почему ReSharper предлагает это» и ссылок там, но я не смог найти объяснения этому.

Это ограничение ReSharper? Или это неверный или плохой стиль для проверки на ноль неявно?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

if (Button) подразумевает неявное преобразование в bool, которое в этом случае не выдает NullReferenceException, но в целом является действительным предупреждением.

0 голосов
/ 31 августа 2018

Хотя на самом деле он не создает исключение NullReferenceException, поскольку ваша кнопка может иметь значение null, а оператор if запускает неявное преобразование в логическое значение, которое создает исключение NullReferenceException, в целом оно остается действительным предупреждением.

Нечто подобное в Java, Проверка, имеет ли значение null Boolean значение true, приводит к исключению

Если вам не нравятся дополнительные проверки на ноль, вы можете сделать C # эквивалент следующего кода Java,

if (Boolean.TRUE.equals(value)) {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...