C# 强制转换为列表中的特定类型
假设我们有一个名为Car的类和另外三个类(欧宝、大众和标致),它们继承了Car的信息,但是每个类都有一个特定的变量 所以我创建了一个新的汽车列表,在其中我添加了这三种类型的CarOpel…等等C# 强制转换为列表中的特定类型,c#,.net,list,types,foreach,C#,.net,List,Types,Foreach,假设我们有一个名为Car的类和另外三个类(欧宝、大众和标致),它们继承了Car的信息,但是每个类都有一个特定的变量 所以我创建了一个新的汽车列表,在其中我添加了这三种类型的CarOpel…等等 Opel CarOpel = new Opel(parameters); 等等 List<Car> Cars = new List<Car>(); Car.Add(CarOpel); ? 如果你需要降低你的车来做一些事情,这可能表明你的继承层次结构是错误的,或者你的方法不在正确
Opel CarOpel = new Opel(parameters);
等等
List<Car> Cars = new List<Car>();
Car.Add(CarOpel);
?
如果你需要降低你的车来做一些事情,这可能表明你的继承层次结构是错误的,或者你的方法不在正确的位置。它可能应该是
Car
类中的虚拟方法,该方法在派生类中被重写。还考虑阅读访问者模式。你必须把它降到特定的类型。
foreach(Car car in Cars)
{
CarOpel opel = car as CarOpel;
if (opel != null)
{
//do something with Opel
}
}
使用或运算符
foreach ( Car car in Cars )
{
if (car is Opel)
{
// do opel operation
var op = (Opel)car;
}
if (car is Volkswagen)
{
// do VW operation
var vw = (Volkswagen)car;
}
}
您可以使用。您应该使用
is
或as
,而不是is
和as
。如果你使用is
你应该直接强制转换,如果你使用as
你会想要空检查结果。我只想强调最后一段,而不是上半段。可能需要的方法应该在Car
中,或者该列表实际上应该是一个比Car
更具体的列表。
foreach ( Car car in cars)
{
if(car is Opel)
{
var opel = (Opel)car;
}
}
foreach(Car car in Cars)
{
CarOpel opel = car as CarOpel;
if (opel != null)
{
//do something with Opel
}
}
foreach ( Car car in Cars )
{
if (car is Opel)
{
// do opel operation
var op = (Opel)car;
}
if (car is Volkswagen)
{
// do VW operation
var vw = (Volkswagen)car;
}
}