Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将IEnumerable_C#_Linq_Ienumerable_Jagged Arrays - Fatal编程技术网

C# 将IEnumerable

C# 将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

从XML文件初始化C中的锯齿数组。根据我在调试器中看到的情况,下面的代码似乎可以创建我想要的数据结构,但代码返回的值类型为IEnumerable

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());