给出以下类型和片段:
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>
存储为某些值和参考类型?
答案 0 :(得分:3)
基本上我只看到一个选项:
public interface IFoo<out T>:IFoo
{
T doThing();
}
public interface IFoo
{
object doThing();
}
public class Bar : IFoo<int>
{
public int doThing(){return 0;}
object IFoo.doThing()
{
return doThing();
}
}
var list = new List<IFoo>
{
new Bar()
};