Существует ряд методов расширения Linq, которые выдают исключение в случае, если последовательность (например, IEnumerable<T>
) пуста или не выполняет утверждение, которое вы делаете, вызывая этот метод.
Single<TSource>()
сгенерирует исключение, если ваша последовательность не содержит ровно один элемент. Таким образом, он генерирует исключение, если последовательность пуста или содержит более одного элемента. Это то, что случилось с тобой. Нет SdtElement
с данным значением тега.
First<TSource>()
, и Last<TSource>()
также вызовет исключение, если последовательность пуста. Они ожидают как минимум один элемент в последовательности.
Если вы не можете гарантировать, что ваша последовательность не пустая, то есть она будет содержать точно или хотя бы один SdtElement
, вы следует использовать SingleOrDefault<TSource>()
или потенциально FirstOrDefault<TSource>()
.
SingleOrDefault<TSource>()
не будет выбрасывать, если последовательность пуста, но будет выбрасывать, если она содержит более одного элемента. Таким образом, он ожидает, что не более одного элемента.
FirstOrDefault<TSource>()
не будет выбрасывать в любом случае. Он вернет null
, если последовательность SdtElement
экземпляров пуста. Если он не пустой, он вернет первый SdtElement
, игнорируя остальные. Таким образом, он ожидает ноль или более элементов.