【发布时间】:2016-03-25 23:48:33
【问题描述】:
给定以下类型和sn-p:
interface IFoo<out T> {
T doThing();
}
class Bar : IFoo<int> {
int doThing() => 0;
}
var list = new List<IFoo<object>> {
new Bar() //fails to compile
};
我了解无法将Bar 添加到List<IFoo<object>>,因为Bar 的T 是一个值类型。
鉴于我需要 IFoo 类型安全,我该如何更改 Bar 或集合,以便可以同时存储 IFoo<T> 的某些值和引用类型?
【问题讨论】:
-
你打算如何使用这个集合?
-
@GuruStron 仅用于访问
doThing。显然,从中提取具有特定类型参数的项目是不安全的。IFoo上的类型安全是为直接操作它们的地方保留的,一旦它存储在集合中,我就可以失去这种安全。
标签: c# generics inheritance covariance