#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. Вероятно, он собирается делать другие вещи, кроме простого подсчета этих элементов, хотя, в этом случае повторение дважды над коллекцией будет излишним.