C# 将派生接口添加到泛型接口

C# 将派生接口添加到泛型接口,c#,generics,C#,Generics,我有这些接口: 该代码: IList<IFinder<IDomainObject>> finders = new List<IFinder<IDomainObject>>(); IFinder<IOrder> orderFinder = this.mocks.StrictMock<IFinder<IOrder>>(); finders.Add(orderFinder); IList finders=new L

我有这些接口:

该代码:

IList<IFinder<IDomainObject>> finders = new List<IFinder<IDomainObject>>();
IFinder<IOrder> orderFinder = this.mocks.StrictMock<IFinder<IOrder>>();
finders.Add(orderFinder);
IList finders=new List();
IFinder orderFinder=this.mocks.StrictMock();
添加(orderFinder);
我在第三行得到这个错误:

参数“1”:无法从“Mes.FrameworkTest.Repository.Finders.IFinder
”转换为“Mes.FrameworkTest.Repository.Finders.IFinder


当IOrder从IDomainObject派生时,为什么会出现此错误?

这需要.Net 4对协方差的支持,协方差可以表示为:

interface IFinder<out T> ...
接口IFinder。。。

如果你没有.Net 4(VS 2010),那你就倒霉了。

这需要.Net 4对协方差的支持,协方差可以这样表示:

interface IFinder<out T> ...
接口IFinder。。。

如果你没有.NET4(VS2010),那你就倒霉了。

我认为,泛型中的协方差和逆变是.NET4.0的新特性。 好书:
我认为泛型中的协方差和逆变是.Net 4.0的新特性。 好书:

您使用的是哪一版本的框架?您使用的是哪一版本的框架?是的,我在.NET 3.5和VS 2008中已经这样做了。但我刚刚尝试将其更新到VS2010,并将项目更新到.NET4,我仍然得到相同的错误。。。。但这可能是因为IList或我自己的IFinder不支持协方差?@Paw:您必须将
out
说明符添加到接口的泛型类型参数中。@Adam:谢谢:)它现在可以工作了。现在我只需要让我的团队尽快升级到VS 2010;)这应该不是什么大问题。是的,我在.NET3.5和VS2008中做过。但我刚刚尝试将其更新到VS2010,并将项目更新到.NET4,我仍然得到相同的错误。。。。但这可能是因为IList或我自己的IFinder不支持协方差?@Paw:您必须将
out
说明符添加到接口的泛型类型参数中。@Adam:谢谢:)它现在可以工作了。现在我只需要让我的团队尽快升级到VS 2010;)这应该不是什么大问题。