假设您有以下类(class):
class Car : IPainting
{
...
}
然后是一个像这样的函数:
void AddCars(IEnumerable<Car> collection)
然后是这样的代码片段:
Car bmw = new Car();
Car mercedes = new Car();
IPainting a = (IPainting) bmw;
IPainting b = (IPainting) mercedes;
IPainting[] paintings = new IPainting[] {a, b};
AddCars(paintings); // fails to compile
这当然不会编译,因为AddCars()方法仅接受Cars的集合,但这是“paintings”数组的组成部分。
我知道C#4.0可能会为此提供解决方案。今天有什么解决方法吗?
谢谢,
阿尔贝托
最佳答案
C#4不允许您编写的代码,因为AddCars
方法需要一个实现IEnumerable<Car>
的IPainting
。这并不意味着您可以传递任何实现IPainting
的类(例如,您可以拥有一个与class Bike : IPainting
类无关的Car
。但是,它将允许相反的方式;如果您具有void AddCars(IEnumerable<IPainting> collection)
,则可以传递List<Car>
的方法。
在此之前,您将需要通过使用某种强制转换机制(例如其他答案中建议的Car
)来坚持将painting.Cast<Car>()
序列传递给该方法。