Обработка нескольких IndexOutOfRangeException

173
21 февраля 2019, 15:50

Ситуация: В методе происходит парсинг данных:

var CompareStatLeftLevel_ = documentleft.All.Where(m =>
m.LocalName == "li" &&
m.HasAttribute("class") &&
m.GetAttribute("class").Contains("user-profile__data-item")
).ElementAt(2).TextContent.ToString();

Нужный элемент с индексом [2] всегда последний в списке "user-profile__data-item". Но иногда он может быть с индексом [1]. Тогда логично было бы написать

try{...ElementAt(2)...}
catch (IndexOutOfRangeException)
{...ElementAt(1)...}

Но что делать если индекс будет [0]?

Нашел информацию про использование "when" в блоке "catch", но что туда передавать?

Answer 1

Если ваш элемент последний - то можете использовать .Last() или .LastOrDefault() из арсенала Linq (это же IEnumerable)

При этом вместе с .LastOrDefault() можете использовать Null-условный оператор ?. если у вас версия C# 6 и выше - будет удобнее обращаться к полям.

.Contains("user-profile__data-item").LastOrDefault()?.TextContent

И ещё хочу заметить - не совсем относящееся к вопросу. Я бы записал ваш пример не как

documentleft.All.Where(m =>
m.LocalName == "li" &&
m.HasAttribute("class") &&
m.GetAttribute("class").Contains("user-profile__data-item")

А более кратко:

document.QuerySelectorAll("li.user-profile__data-item")
READ ALSO
C# работа с созданным cmd процессом

C# работа с созданным cmd процессом

Всем привет ! В питоне есть такая штука как subprocess и создавая его можно заставить программу писать в консоль и читать результат из консолиТ...

170
Unity BoxCollider - растянуть по размеру предмета

Unity BoxCollider - растянуть по размеру предмета

Когда добавляешь BoxCollider к новому предмету, он автоматически растягивается под его размерыКогда меняешь меш этого предмета - коллайдер не подтягивается...

173
Реализовать сохранение и открытие сохраненного файла в проекте

Реализовать сохранение и открытие сохраненного файла в проекте

Можно ли сохранить массив объектов, в отдельный файл, а потом запустить этот файл в приложении и восстановить массив (который был в файле)...

144
Передать значение $_SERVER одного домена в другой домен

Передать значение $_SERVER одного домена в другой домен

У меня получается получить значении таким образом (работаю c разными доменами):

170