gpt4 book ai didi

c# - 从嵌套对象中获取不同的值列表

转载 作者:太空狗 更新时间:2023-10-29 22:57:53 24 4
gpt4 key购买 nike

我正在将 XML 文件反序列化为对象模型。虽然这不是实际模型,但下面的结构与我的相似。

[Serializable()]
[System.Xml.Serialization.XmlRoot("AutoEnvelope")]
public class AutoBody
{
[XmlArray("AutoBody")]
[XmlArrayItem("Vehicles", typeof(Vehicles))]
public Vehicles[] Vehicles { get; set; }

}

[Serializable()]
public class Vehicles
{
[XmlElement("SelectedCar", typeof(SelectedCar))]
public SelectedCar SelectedCar { get; set; }

[XmlElement("OfferedVehicles", typeof(OfferedVehicles))]
public OfferedVehicles OfferedVehicles { get; set; }

}

[Serializable()]
public class SelectedCar
{
[System.Xml.Serialization.XmlElement("Model")]
public string Model { get; set; }

[System.Xml.Serialization.XmlElement("NumTires")]
public int NumTires { get; set; }

[System.Xml.Serialization.XmlElement("Color")]
public string Color { get; set; }

}

我正在尝试获取不同的 SelectedCar.Color 值列表,但没有成功。假设我将数据存储在一个名为 autoBody 的变量中,我尝试了以下变体:

List<char> uniqueColors = autoBody.SelectMany(auto => auto.SelectedCar.Color).Distinct().ToList();

我显然做错了什么,但不清楚如何实现我的目标。

最佳答案

SelectMany()方法用于将多个数组(实际上是实现 IEnumerable<T> 的任何东西)投影到单个数组中。

例如,如果您有一个 AutoBody 的列表项目,你想积累所有相关的 Vehicles到一个数组中,你会这样做:

IEnumerable<Vehicles> vehicles = autoBodies.SelectMany(x => x.Vehicles);

但是,当您使用 SelectMany 时在 string 上属性(在您的情况下为 Color),您基本上是在投影 string进入 IEnumerable<char> (因为 String 确实实现了 IEnumerable<char> 因为它实际上是一个字符序列)。

尝试使用 Select()相反:

List<string> uniqueColors = autoBody.Select(auto => auto.SelectedCar.Color)
.Distinct()
.ToList()

参见 MSDN

关于c# - 从嵌套对象中获取不同的值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34883817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com