【问题标题】:Combining different data of two lists into one将两个列表的不同数据合并为一个
【发布时间】:2019-05-07 10:01:29
【问题描述】:

所以如果我有 3 个类:一个包含司机的数据(他的姓名、车牌),第二个包含汽车数据(商标、车牌、制造年份、里程),第三个应该包含(Taksi)司机姓名、车牌、汽车制造年份等数据。

public class Car : Taksi
{
    public string Trademark { get; set; }
    public new int RegPlate { get; set; }
    public int YearMade { get; set; }
    public int Mileage { get; set; }
    public Car (string Trademark, int RegPlate, int YearMade, int Mileage)
    {
        this.Trademark = Trademark;
        this.RegPlate = RegPlate;
        this.YearMade = YearMade;
        this.Mileage = Mileage;
    }
}

public class Driver : Taksi
{
    public new string Name { get; set; }
    public new int RegPlate { get; set; }
    public Driver(string Name , int RegPlate )
    {
        this.Name = Name;
        this.RegPlate = RegPlate ;
    }
}

public class Taksi
{
    public string Name { get; set; }
    public int RegPlate { get; set; }
    public string Trademark { get; set; }
    public int YearMade { get; set; }
    public int Mileage { get; set; }
    public Taksi()
    {
    }
    public Taksi(string Name,string Trademark,int YearMade)
    {
        this.Name = Name;
        this.Trademark = Trademark;
        this.YearMade = YearMade;
    }
}

问题是我有两个列表。第一个列表保存司机的数据,第二个保存汽车的数据。现在我不知道获取“Car”和“Driver”类的部分数据(名称、注册牌、年份)的最佳方法是什么,然后将它们合并并添加到

List<Taksi> Taks = new List<Taksi>();

有可能吗?

【问题讨论】:

  • 是的,这是可能的
  • 使用 LINQ Join 可能是您正在寻找的:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
  • 那么你到底想要什么?合并对象?如果是这样,在什么财产上?
  • 我相信你已经解决了这个问题。您正在尝试做的事情应该是可能的。
  • 在派生类中为 Name & RegPlate 创建新属性而不是使用基类中的字段是否有原因?

标签: c#


【解决方案1】:

我建议您重新考虑您的类结构 - Driver 不是 Taksi 的一种类型,因此不应从该类派生。 Taksi 可以被认为是 Driver 和 Car 的组合,因此与其从 Taksi 派生 Car,不如从 Car 派生 Taksi(基本上您将 Taksi 视为一种 Car - 而不是 Car 作为Taksi 的类型)。

public class Car
{
    public string Trademark { get; set; }
    public int YearMade { get; set; }
    public int Mileage { get; set; }
    public int RegPlate { get; set; }
    public Car (string Trademark, int RegPlate, int YearMade, int Mileage)
    {
        this.Trademark = Trademark;
        this.RegPlate = RegPlate;
        this.YearMade = YearMade;
        this.Mileage = Mileage;
    }
}

public class Driver
{
    public string Name { get; set; }
    public int RegPlate { get; set; }
    public Driver(string Name , int RegPlate )
    {
        this.Name = Name;
        this.RegPlate = RegPlate ;
    }
}

public class Taksi : Car
{
    public Driver TaksiDriver { get; set; }
    public Taksi(Driver TaksiDriver, Car TaksiCar)
      : base(TaksiCar.Trademark, TaksiCar.RegPlate, TaksiCar.YearMade, TaksiCar.Mileage)
    {
        this.TaksiDriver = TaksiDriver;
    }
}

然后您可以像这样组合您的汽车和司机列表:

  List<Car> cars = new List<Car>(); 
  List<Driver> drivers = new List<Driver>();
  .....
  .....

  List<Taksi> taksis = (from car in cars
    join driver in drivers on car.RegPlate equals driver.RegPlate
    select new Taksi( driver, car )).ToList() ;

【讨论】:

    【解决方案2】:

    试试这个,顺便说一句,汽车类不需要这么多属性。

    var cars = new List<Car>();
    var drivers = new List<Driver>();
    
    var taksi = from c in cars
                from d in drivers
                where c.RegPlate == d.RegPlate
                select new Taksi()
                {
                     Name = d.Name,
                     RegPlate = d.RegPlate,
                     Trademark = c.Trademark,
                     YearMade = c.YearMade,
                     Mileage = c.Mileage
                };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 2014-01-27
      • 2014-04-01
      相关资源
      最近更新 更多