0

Только начал изучать c# поэтому пока что балуюсь параллельно изучая основы. Решил написать парсер для одного сайта, с помощью AngleSharp библиотеки.

Есть вот такой код взятый с документации

var config = Configuration.Default.WithDefaultLoader();
var address = "https://ru.wikipedia.org/wiki/Google";
var context = BrowsingContext.New(config);
var document = await context.OpenAsync(address);
var google = document.QuerySelector("div.mw-parser-output ul li:nth-child(5)").TextContent;

Который работает и выдает ожидаемый результат "Google — слово английского языка." Но стоит мне заменить допустим :nth-child(5) на :nth-child(6)

То получаю ошибку на 5 строке:

ошибка

Я понимаю что этого нет на сайте, но я ожидал получить null и уже дальше самому решать что с этим делать. Потому что на моем сайте не на всех страницах существуют теги которые я собираюсь парсить.

  • 1
    А вы и получили null но только вы сделали null.TextContext - т.е. не указали, что делать с null. Вариантов два. Либо записать строку в форме var google = document.QuerySelector("div.mw-parser-output ul li:nth-child(5)")?.TextContent; либо убрать .TextContent и проверить на null в следующей строке и решать что и как с этим null делать. По факту, вы ДУМАЕТЕ что знаете как работает код, но на деле - нет. Вы именно в коде указали "я не хочу решать, что делать с null, тут его не будет". А он вдруг - есть! – A K Sep 15 '21 at 16:20
  • 1
    вы и получаете null, но после этого вы пытаетесь у null вызвать свойство TextContent что и приводит к исключению. Для того, что бы это работало так, как вы ожидаете вы можете исользовать оператор знак вопроса: document.QuerySelector("div.mw-parser-output ul li:nth-child(5)")?.TextContent – iikuzmychov Sep 15 '21 at 16:20
  • Вот ещё объяснение. По факту пятая строка содержит в себе две строки. Первая var element = document.QuerySelector("div.mw-parser-output ul li:nth-child(5)") и вторая var elementContent = element.TextContent; и вы не видите эту склеенность двух строк. Поставьте после первой if(element == null) и вот тогда будет видно, что хотите решать что с этим null делать. Пока что в показанном коде видно, что писавший не ожидает никак null. Ожидающий null поставит ? перед .TextContent – A K Sep 15 '21 at 16:26

0 Answers0