C# 如何访问<;列表>;在另一个内部<;列表>;?
我很难弄清楚如何使用C# 如何访问<;列表>;在另一个内部<;列表>;?,c#,serialization,C#,Serialization,我很难弄清楚如何使用ForEach(或不使用它)打印出父列表中的汽车列表。我知道我显然不能做XmlData.p.b.ForEach,下面的代码只是一个例子,因为我需要做很多操作,但我只需要知道如何访问列表p中b中的列表 public static void Main(string[] args) { XmlSerializer deserializer = new XmlSerializer(typeof(Address)); TextReader reader = new St
ForEach
(或不使用它)打印出父列表中的汽车
列表。我知道我显然不能做XmlData.p.b.ForEach
,下面的代码只是一个例子,因为我需要做很多操作,但我只需要知道如何访问列表p中b中的列表
public static void Main(string[] args)
{
XmlSerializer deserializer = new XmlSerializer(typeof(Address));
TextReader reader = new StreamReader("myXML.xml");
object obj = deserializer.Deserialize(reader);
Address XmlData = (Address)obj;
reader.Close();
XmlData.p.ForEach(p => Console.WriteLine("Item in p!");
XmlData.p.b.ForEach(b => Console.WriteLine("Item in b!"); // can't do this
}
XML格式:
顶部:MyRoot
----------目标
-----------------母公司
----------------------------汽车
[XmlRoot("MyRoot")]
public class MyRoot
{
[XmlElement("Dealership")]
public String dealership;
[XmlElement("ZipCode")]
public String zipCode;
[XmlArray("Targets")]
[XmlArrayItem("Parent")]
public List<Parent> p = new List<Parent>();
}
public class Parent : Student
{
[XmlElement("ParentName")]
public String parentName { get; set; }
}
public class Student
{
[XmlElement("Owner")]
public String owner { get; set; }
[XmlElement("Age")]
public String age { get; set; }
[XmlElement("Name")]
[XmlArrayItem("Cars")]
public List<Cars> c = new List<Cars>();
}
public class Cars
{
[XmlElement(Namespace="BuildDependency/CarYear")]
public String carYear { get; set; }
[XmlElement(Namespace = "BuildDependency/CarMake")]
public String carMake { get; set; }
[XmlElement(Namespace = "BuildDependency/CarModel")]
public String carModel { get; set; }
[XmlElement("CarColor")]
public String carColor { get; set; }
[XmlElement("CarMileage")]
public String carMileage { get; set; }
}
[XmlRoot(“MyRoot”)]
公共类MyRoot
{
[XmlElement(“经销商”)]
公共字符串代理;
[XmlElement(“ZipCode”)]
公共字符串zipCode;
[XmlArray(“目标”)]
[XmlArrayItem(“母公司”)]
公共列表p=新列表();
}
公营班级家长:学生
{
[XmlElement(“父项名称”)]
公共字符串parentName{get;set;}
}
公立班学生
{
[XmlElement(“所有者”)]
公共字符串所有者{get;set;}
[XmlElement(“年龄”)]
公共字符串年龄{get;set;}
[XmlElement(“名称”)]
[XmlArrayItem(“汽车”)]
公共列表c=新列表();
}
公车
{
[xmlement(Namespace=“BuildDependency/CarYear”)]
公共字符串carYear{get;set;}
[xmlement(Namespace=“BuildDependency/CarMake”)]
公共字符串carMake{get;set;}
[xmlement(Namespace=“BuildDependency/CarModel”)]
公共字符串carModel{get;set;}
[XmlElement(“CarColor”)]
公共字符串carColor{get;set;}
[XmlElement(“CarMileage”)]
公共字符串carMileage{get;set;}
}
您可以使用以下方法展平列表:
如果希望轻松地迭代另一个列表中的列表,可以在第一个列表迭代范围内进行,类似于(不使用lambda表达式,而是使用标准循环来保持简单):
for(int i=0;i或者您可以嵌套第二个ForEach调用:
XmlData.p.ForEach(outer => outer.b.ForEach(inner => Console.WriteLine("Item in b!")));
很明显,这是行不通的,您的代码需要调整,以便b进入foreach类
您的第二次呼叫(在列表中的列表上迭代)应该是:
XmlData.p.ForEach(p => p.c.ForEach(c => { Console.WriteLine("Item in C"); }));
我已经编写了一个非常小的演示项目,我将与大家分享:
首先是使项目工作的一些类:
public class MyRoot
{
public List<Student> p = new List<Student>();
}
public class Student
{
public List<Cars> c = new List<Cars>();
}
public class Cars
{
public String carYear { get; set; }
public String carMake { get; set; }
public String carModel { get; set; }
public String carColor { get; set; }
public String carMileage { get; set; }
}
现在,要对其进行迭代,您需要执行以下操作:
root.p.ForEach(p => Console.WriteLine("Item in 1"));
root.p.ForEach(p => p.c.ForEach(c => Console.WriteLine(" Item in 2")));
这将提供以下输出:
注意:当您有2名学生,1名学生有4辆车,另一名学生有2辆车时,输出将变为:
这是因为首先我们要迭代学生,然后是汽车。
当您看到每个学生的车时,您可以嵌套您的foreach。您的foreach将如下所示:
root.p.ForEach(p =>
{
Console.WriteLine("Item in 1");
p.c.ForEach(c => Console.WriteLine(" Item in 2"));
});
然后您的输出将是:
所以,相当长的文章,但我希望它有帮助
var cars = new List<Cars>();
cars.Add(new Cars());
cars.Add(new Cars());
cars.Add(new Cars());
cars.Add(new Cars());
var student = new List<Student>();
student.Add(new Student() { c = cars });
var root = new MyRoot();
root.p = student;
-- Root
-- Student
-- Car
-- Car
-- Car
-- Car
root.p.ForEach(p => Console.WriteLine("Item in 1"));
root.p.ForEach(p => p.c.ForEach(c => Console.WriteLine(" Item in 2")));
root.p.ForEach(p =>
{
Console.WriteLine("Item in 1");
p.c.ForEach(c => Console.WriteLine(" Item in 2"));
});