C# 迭代具有不同结构的类
我需要在HTML表中显示上述类的实例。所有对象都应按速度属性排序C# 迭代具有不同结构的类,c#,C#,我需要在HTML表中显示上述类的实例。所有对象都应按速度属性排序 public class Bus { public float Speed {get; set;} public string Name {get; set;}} public class Tram { public float Speed {get; set;} public string Name {get; set;}} public class Car { public float Speed {get; set;} pu
public class Bus { public float Speed {get; set;} public string Name {get; set;}}
public class Tram { public float Speed {get; set;} public string Name {get; set;}}
public class Car { public float Speed {get; set;} public string Name {get; set;}}
public class Bike
{
public float Speed {get; set;}
public string Name {get; set;}
public double Height {get; set;}
public double Width {get; set;}
}
表如下所示:
Name | Speed | Height | Width
Bus | 180 | |
Bus | 179 | |
Bike | 30 | 23 | 32
Tram | 23 | |
我如何迭代这些对象,然后显示它们?我应该实现一些接口吗?
如果所有类都有相同的字段,这将非常容易,但在本例中,Bike类有四个属性。在创建模型时,首先确定概念的公共属性。您可以使用公共属性创建一个抽象基类(在我的示例中名为“Vehicle”),然后在子类中继承:
public abstract class Vehicle
{
public string Name { get; set; }
public float Speed { get; set; }
}
public class Bus : Vehicle { }
public class Tram : Vehicle { }
public class Car : Vehicle { }
public class Bike : Vehicle
{
public double Width { get; set; }
public double Height { get; set; }
}
然后可以迭代基类类型的集合,并在处理每个实例之前对其进行类型检查:
var vehicles = new List<Vehicle>
{
new Bus { Name = "Bus", Speed = 180 },
new Bus { Name = "Bus", Speed = 179 },
new Bike { Name = "Bus", Speed = 180, Height = 23, Width = 32 },
new Tram { Name = "Bus", Speed = 23 }
};
foreach (var vehicle in vehicles)
{
// ..Output vehicle.Name & vehicle.Speed
if (vehicle is Bike bike)
{
// Output bike.Height & bike.Width
}
}
var车辆=新列表
{
新总线{Name=“Bus”,速度=180},
新总线{Name=“Bus”,速度=179},
新自行车{Name=“Bus”,速度=180,高度=23,宽度=32},
新电车{Name=“Bus”,速度=23}
};
foreach(车辆中的var车辆)
{
//..输出车辆.名称和车辆.速度
if(车辆为自行车)
{
//输出自行车。高度和自行车。宽度
}
}
在创建模型时,首先确定概念的公共属性。您可以使用公共属性创建一个抽象基类(在我的示例中名为“Vehicle”),然后在子类中继承:
public abstract class Vehicle
{
public string Name { get; set; }
public float Speed { get; set; }
}
public class Bus : Vehicle { }
public class Tram : Vehicle { }
public class Car : Vehicle { }
public class Bike : Vehicle
{
public double Width { get; set; }
public double Height { get; set; }
}
然后可以迭代基类类型的集合,并在处理每个实例之前对其进行类型检查:
var vehicles = new List<Vehicle>
{
new Bus { Name = "Bus", Speed = 180 },
new Bus { Name = "Bus", Speed = 179 },
new Bike { Name = "Bus", Speed = 180, Height = 23, Width = 32 },
new Tram { Name = "Bus", Speed = 23 }
};
foreach (var vehicle in vehicles)
{
// ..Output vehicle.Name & vehicle.Speed
if (vehicle is Bike bike)
{
// Output bike.Height & bike.Width
}
}
var车辆=新列表
{
新总线{Name=“Bus”,速度=180},
新总线{Name=“Bus”,速度=179},
新自行车{Name=“Bus”,速度=180,高度=23,宽度=32},
新电车{Name=“Bus”,速度=23}
};
foreach(车辆中的var车辆)
{
//..输出车辆.名称和车辆.速度
if(车辆为自行车)
{
//输出自行车。高度和自行车。宽度
}
}
您需要使用Reflection是否可以在此处引入父类?这将帮助您利用LINQ并执行类似于,.SortBy
的操作,按Speed
属性对元素进行排序。@mjwills:和Name
属性。您可以将这些属性移动到一个抽象基类并从此基类继承。创建一个基类,该基类具有属性名称、速度、高度和宽度,这将使其易于迭代。基类Machine
,然后具有classTram:Machine
等等。您需要使用reflection在此处引入父类吗?这将帮助您利用LINQ并执行类似于,.SortBy
的操作,按Speed
属性对元素进行排序。@mjwills:和Name
属性。您可以将这些属性移动到一个抽象基类并从此基类继承。创建一个基类,该基类具有属性名称、速度、高度和宽度,这将便于迭代。基类Machine
,然后具有classTram:Machine
等等