假设您有以下类(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>()序列传递给该方法。

09-16 22:30