Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 如何访问<;列表>;在另一个内部<;列表>;?_C#_Serialization - Fatal编程技术网

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

   });