我有基础课:
class ARBase<T> : ActiveRecordValidationBase<T> where T : class
{
}
少儿班
class Producent : ARBase<Producent>
{
}
class Supplier : ARBase<Supplier>
{
}
现在在其他类中,我想拥有Property类型:
public IList<ARBase<Object>> MyCollection
{
}
并希望能够分配供应商集合或生产者集合,但我遇到错误:无法将
List<Producent>
强制转换为IList<ARBase<Object>>
...有人知道解决方案吗?
最佳答案
基本上,问题是.NET泛型不支持这样的协方差-在某些情况下有支持,但仅支持接口和委托,而C#仅从版本4开始支持。(IList<T>
仍然不是。 NET 4.0,因为它同时使用“输入”和“输出”两种含义的T
。)
作为可能出问题的示例,假设有人在Supplier
列表中添加了Producer
-您不希望允许这样做,但是如果可以转换,则无法在编译时阻止它List<Producer>
到IList<ARBase<object>>
。
您希望您的消费者能够对您的财产做什么?那将建议如何进行。