Инициализация массива с зазубринами в C # из файла XML. Следующий код, кажется, работает для создания структуры данных, которую я хочу, исходя из того, что я вижу в отладчике, но код возвращает значение типа 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());
Если я добавлю лишний .ToArray()
в конце (благодаря другим статьям StackOverflow), я верну int[1][][]
.
Есть идеи, как заставить код работать, чтобы я мог просто написать int[][] array = (from e in...
и т. Д.?
2 ответа
Если всегда есть только один элемент doc
, вы можете сделать следующее:
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
:
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()
).SelectMany(x => x).ToArray());
У вас есть потомки * строки * столбцы. Это 3D, а вам нужно 2D. Я думаю, вы ожидаете, что в вашем xml-файле будет только один потомок "doc". Вы можете проверить это с помощью 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());
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.