C# 将IEnumerable
从XML文件初始化C中的锯齿数组。根据我在调试器中看到的情况,下面的代码似乎可以创建我想要的数据结构,但代码返回的值类型为IEnumerableC# 将IEnumerable,c#,linq,ienumerable,jagged-arrays,C#,Linq,Ienumerable,Jagged Arrays,从XML文件初始化C中的锯齿数组。根据我在调试器中看到的情况,下面的代码似乎可以创建我想要的数据结构,但代码返回的值类型为IEnumerable var ia = (from e in XDocument.Load("Test.xml").Descendants("doc") select ( from rows in e.Elements("rows") select ( from
var ia = (from e in XDocument.Load("Test.xml").Descendants("doc")
select (
from rows in e.Elements("rows")
select (
from cols in rows.Elements("cols")
select int.Parse(cols.Value)
).ToArray()
).ToArray());
如果由于其他StackOverflow文章的缘故,我在末尾添加了一个额外的.ToArray,那么我会得到int[1][]
关于如何让代码工作以便我可以简单地从e中编写int[][]array=的任何想法。。。等等?如果始终只有一个文档元素,则可以执行以下操作:
var ia = (from e in XDocument.Load("Test.xml").Descendants("doc")
select (
from rows in e.Elements("rows")
select (
from cols in rows.Elements("cols")
select int.Parse(cols.Value)
).ToArray()
).First().ToArray());
如果您需要不止一个doc元素,您可以进行额外的SelectMany调用:
您有后代*行*列。这是3D的,你想要2D的。我猜您希望xml文件中只有一个doc子体。您可以使用Single验证,如果集合中有多个项目,即多个文档,则Single将失败:
var ia = (from e in XDocument.Load("Test.xml").Descendants("doc")
select (
from rows in e.Elements("rows")
select (
from cols in rows.Elements("cols")
select int.Parse(cols.Value)).ToArray()).Single().ToArray());
您有后代*行*列。这是3D的,你想要2D的。这才是真正的问题。我猜你只有一个文档,对吗?你有三级枚举,所以在锯齿数组中有三级深度。可以有多个文档,可以有多行,也可以有多个列。您希望合并哪些阵列以便只有两个级别?是,只有一个文档元素。我想我应该重新考虑在这种情况下使用后代。谢谢大家的修复。你们回来这么快@是的,您肯定应该考虑不使用这样的后代。好文章,马辛。谢谢对于将来阅读本文的任何人,下面是最后一段代码,使用Marcin的文章:int[][]ia=from e in XDocument.LoadTest.xml.Elementdoc.elementsrrows select from cols in e.Elementscols select int.Parsecols.Value.ToArray.ToArray;如果doc是文档上的根元素,则可以将Load.Elementdoc.Elements更改为Load.root.ElementsThanks-i3arnon也会检查这一点。
var ia = (from e in XDocument.Load("Test.xml").Descendants("doc")
select (
from rows in e.Elements("rows")
select (
from cols in rows.Elements("cols")
select int.Parse(cols.Value)).ToArray()).Single().ToArray());