XDocument.Потомки («somethinghere»).Метод Count() не существует

#c# #xml #linq

#c# #xml #linq

Вопрос:

Я пытаюсь выполнить простой подсчет некоторых потомков, используя LINQ to XML, и метод «Count ()» для меня не существует?

Пример:

 using System.Xml.Linq;

XDocument doc = XDocument.Load( "somexmlfile" );
int count = doc.Descendants("somethinghere").Count();
  

Приведенный выше метод не будет скомпилирован, поскольку он не распознает Count() метод.

Комментарии:

1. Есть ли у вас using System.Linq; в верхней части файла?

2. Нет, и это исправлено! Ваш человек!

Ответ №1:

Есть ли у вас using System.Linq; в верхней части файла?

Ответ №2:

Это потому, что Descendants(XName name) возвращает IEnumerable<XElement> .

По замыслу IEnumerable lazy загружает данные, и поэтому подсчет элементов в коллекции приведет к возникновению перечисления.

Я бы, вероятно, преобразовал это в, IList который имеет Count свойство, которое вы можете использовать.

Комментарии:

1. Я был в курсе всего этого, просто я нашел множество примеров в сети, показывающих XDocument. Descendants().Count() и был озадачен, почему у меня не было этого метода. Теперь я знаю, почему, благодаря svick.

2. Если все, что вы хотите сделать, это посчитать элементы, то преобразование в список является излишним.

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