我首先这样做是为了返回父节点下的一组特定节点,该节点的id等于1,这是非常有效的。
IEnumerable<XElement> world1 = LevelData.root.
Elements("world").
Where(element => (int?)element.Attribute("id") == 1);但是我需要多次这样做,并且每个实例都有自己的实例,所以我想把它们放到一个列表中,但是它甚至没有编译,告诉我错误CS0266:
无法隐式地将“System.Collections.Generic.IEnumerable”类型转换为“System.Collection s.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++;
}因此,我尝试在List<IEnumerable<XElement>>之前添加强制转换的LevelData.root.,但随后得到了一个无效的异常。我在一块砖墙上,想去哪里。有什么建议吗?
发布于 2013-02-11 21:36:21
Where方法不返回一个List<>,它返回一个IEnumerable<>,它在枚举时是延迟计算的。
如果您想要一个实际的List<>对象,请在最后插入一个.ToList(),这样就可以了。
发布于 2013-02-11 21:36:11
var world1 = LevelData.root
.Elements("world")
.Where(element => (int?)element.Attribute("id") == 1)
.ToList();您需要使用ToList()从IEnumerable转换它,因为IList接口比IEnumerable接口支持更多的功能。
发布于 2013-02-11 21:37:09
可以通过调用IEnumerable<T>将List<T>转换为ToList()
List<XElement> world1 = LevelData.root
.Elements("world")
.Where(element => (int?)element.Attribute("id") == 1)
.ToList();https://stackoverflow.com/questions/14821258
复制相似问题