Вы не упомянули, используете ли вы .NET 4.0 или более раннюю версию, но если вы используете .NET 4.0, то вам может помочь новая функция совмещения / противоречия для общих интерфейсов.
Вы обнаружили, что вы не можете разыграть List<Car>
как List<MyBaseClass>
, но в .NET 4.0 вы можете разыграть IEnumerable<Car>
как IEnumerable<MyBaseClass>
.
Затем вы можете вызывать функции, для которых требуется IEnumerable<MyBaseClass>
с вашим List<Car>
в качестве параметра, без какого-либо специального преобразования или кода приведения.
Например, этот код работает в .NET 4.0:
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(IEnumerable<MyBaseClass> vehicles)
{
var found = vehicles.Where(v => v.VechicleId == 123);
}
Надеюсь, это поможет.