我首先要在父节点下返回一组特定的节点,这些节点的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&gt;'。存在显式转换(您是否错过了演员?)
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++;
}
所以我尝试在List<IEnumerable<XElement>>
之前添加广告LevelData.root.
但后来我得到了一个无效的恶习。我在哪里可以去砖墙。有什么建议?
答案 0 :(得分:5)
Where
方法不会返回List<>
,它会返回IEnumerable<>
,在枚举时会对其进行延迟评估。
如果您想要一个实际的List<>
对象,请在最后添加.ToList()
,这样就可以了。
答案 1 :(得分:4)
var world1 = LevelData.root
.Elements("world")
.Where(element => (int?)element.Attribute("id") == 1)
.ToList();
您需要使用ToList()将其转换为IEnumerable,因为IList界面支持的功能比IEnumerable界面更多。
答案 2 :(得分:2)
您可以致电IEnumerable<T>
List<T>
转换为ToList()
List<XElement> world1 = LevelData.root
.Elements("world")
.Where(element => (int?)element.Attribute("id") == 1)
.ToList();
答案 3 :(得分:2)
您的问题有点令人困惑,您似乎有List<IEnumerable<XElement>>
数组,并且您正在尝试为其分配IEnumerable<XElement>
。
如果您只想要一个List
IEnumerable<XElement>
,这应该可行
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
}