Подтвердить что ты не робот

Преобразование XmlNodeList в список <string>

Можно ли преобразовать XmlNodeList в List? без объявления нового списка Я ищу простую реализацию для этого:

System.Xml.XmlNodeList membersIdList = xmlDoc.SelectNodes("//SqlCheckBoxList/value");
    List<string> memberNames = new List<string>();
    foreach (System.Xml.XmlNode item in membersIdList)
    {
        memberNames.Add(library.GetMemberName(int.Parse(item.InnerText)));
    }
4b9b3361

Ответ 1

Да, возможно использование LINQ:

var memberNames = membersIdList.Cast<XmlNode>()
                               .Select(node => node.InnerText)
                               .Select(value => int.Parse(value))
                               .Select(id => library.GetMemberName(id))
                               .ToList();

Cast<XmlNode>() необходим, потому что XmlNodeList не реализует общий IEnumerable<T>, поэтому вам нужно явно преобразовать его в общую коллекцию из не общего IEnumerable.

И да, вы можете объединить все вызовы Select в один, если хотите:

var memberNames = membersIdList.Cast<XmlNode>()
                               .Select(x => library.GetMemberName(int.Parse(x.InnerText)))
                               .ToList();

Ответ 2

Почему вы не используете LINQ to XML?

List<string> memberNames = XDocument.Load("path")
                           .XPathSelectElements("//SqlCheckBoxList/value")
                           .Select(x => library.GetMemberName((int)x))
                           .ToList();