Почему Visual Studio всё равно даёт предупреждение CS8602?

Рейтинг: 0Ответов: 1Опубликовано: 06.07.2023

IDE Выдаёт предупреждение, хотя я проверяю значение переменной на ноль. Пишу если что WPF приложение.

        public MainWindow()
        {
            InitializeComponent();
            this.ResizeMode = ResizeMode.NoResize;
            IDocument? Page = Parser.GetPage(url);
            if (Page !=null)
            {
                TextBox1.Text = Page.Body.InnerHtml;
            }
   public static IDocument GetPage(string url)
        {
            IConfiguration config = Configuration.Default;
            IDocument? document = BrowsingContext.New(config).OpenAsync(url).Result;
            return document;
        }

Полное предупреждение:

Warning CS8602 Dereference of a possibly null reference

Ответы

▲ 0Принят

Нужно написать:

TextBox1.Text = Page?.Body?.InnerHtml; // это будет работать всегда и без if всегда переписывать значение TextBox1

Тогда не будет ругаться. Это значит, если Page нуль, то сразу возвращается нуль, а если Page не нуль, то идёт обращение к члену Body.

И на счёт if подумать. Нужно ли содержимое TextBox1 переписывать всегда, или только когда не нуль, а в противном случает там остаётся существующее значение.

UPD Alexander Petrov справедливо про Body написал, к нему операцию "?." тоже нужно применить.