如何转换为列表<;IEnumerable<;XElement>>;
本文关键字:lt gt IEnumerable XElement 列表 何转换 转换 | 更新日期: 2023-09-27 17:58:47
我首先这样做是为了在id等于1的父节点下返回一组特定的节点,这非常有效。
IEnumerable<XElement> world1 = LevelData.root.
Elements("world").
Where(element => (int?)element.Attribute("id") == 1);
但我需要多次这样做,每个实例都有自己的实例,所以我想把它们放在一个列表中,但它甚至没有编译,告诉我错误CS0266:
无法将类型"System.Collections.Generic.IEnumerable"隐式转换为"System.Collections.Generic.List>"。存在显式转换(是否缺少强制转换?)
List<IEnumerable<XElement>>[] World = new List<IEnumerable<XElement>>[noofworlds];
foreach (List<IEnumerable<XElement>> wn in World)
{
Debug.WriteLine("World: "+w);
//this will make a list of all the nodes (elements) within the world specified by the id tag
World[w] = LevelData.Root.Elements("world").Where(element => (int?)element.Attribute("id") == 1);//with id == to i
w++;
}
所以我尝试在LevelData.root.
之前添加演员阵容List<IEnumerable<XElement>>
但后来我得到了一个invalidcastexception。我在一堵砖墙前,不知道该去哪里。有什么建议吗?
Where
方法不返回List<>
,而是返回IEnumerable<>
,在枚举时对其进行延迟求值。
如果你想要一个真正的List<>
对象,在末尾粘贴一个.ToList()
,就可以了
var world1 = LevelData.root
.Elements("world")
.Where(element => (int?)element.Attribute("id") == 1)
.ToList();
您需要使用ToList()将其从IEnumerable转换过来,因为IList接口比IEnumeraable接口支持更多的功能。
您可以通过调用ToList()
将IEnumerable<T>
转换为List<T>
List<XElement> world1 = LevelData.root
.Elements("world")
.Where(element => (int?)element.Attribute("id") == 1)
.ToList();
您的问题有点令人困惑,您似乎有一个List<IEnumerable<XElement>>
数组,并且您正试图为其分配一个IEnumerable<XElement>
。
如果你只想要IEnumerable<XElement>
的List
,这应该可以
List<IEnumerable<XElement>> World = new List<IEnumerable<XElement>>();
for (int i = 0; i < noofworlds; i++)
{
World.Add(LevelData.Root.Elements("world").Where(element => (int?)element.Attribute("id") == i));//with id == to i
}
否则,tou将不得不创建一个新列表来添加到数组中,并将IEnumerable<XElement>
添加到该列表中。
List<IEnumerable<XElement>>[] World = new List<IEnumerable<XElement>>[noofworlds];
for (int i = 0; i < noofworlds; i++)
{
World[i] = new List<IEnumerable<XElement>> { (LevelData.Root.Elements("world").Where(element => (int?)element.Attribute("id") == i)) };//with id == to i
}