kay*_*yak 2 c# generics reflection
我怎么能强制转换List<Car>到 List<MyBaseClass>,在列表中我的代码实例会作为一个对象(程序要求不是故意的),这样做,我会找回vehicleId ..
public Form1()
{
List<Car> lstCar = new List<Car>();
lstCar.Add(new Car() { Make = "tootay", Model = "camry", VechicleId = 1 });
lstCar.Add(new Car() { Make = "honda", Model = "civic", VechicleId = 2 });
VehicleConverter(lstCar);
}
public void VehicleConverter(object obj)
{
//Want to typecast it to List<MyBaseClass>
}
}
public class MyBaseClass
{
public int VechicleId { get; set; }
}
public class Car:MyBaseClass
{
public string Make { get; set; }
}
public class Bike : MyBaseClass
{
public int CC { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是不可能的.
如果有可能,您将能够编写以下内容:
List<Car> carList = new List<Car>();
List<BaseClass> baseList = (List<BaseClass>)carList;
baseList.Add(new Bike()); //I just put a Bike into a List<Car>!
Run Code Online (Sandbox Code Playgroud)
备择方案:
List<BaseCLass>IList(不推荐)IEnumerable<BaseClass>,使用.NET 4中的协方差传递列表的类型副本:
VehicleConverter(lstCar.ConvertAll(c => (BaseClass)c));
Run Code Online (Sandbox Code Playgroud)