2010-09-09 111 views
1

我已經得到了這些接口:添加導出接口,通用接口

alt text

而這種代碼:

IList<IFinder<IDomainObject>> finders = new List<IFinder<IDomainObject>>(); 
IFinder<IOrder> orderFinder = this.mocks.StrictMock<IFinder<IOrder>>(); 
finders.Add(orderFinder); 

我得到第三行此錯誤:

參數'1':無法從'Mes.FrameworkTest.Repository.Finder.Finder <Mes.FrameworkTest.DomainModel.IOrder>'轉換爲'Mes.FrameworkT 'est.Repository.Finders.IFinder <Mes.FrameworkTest.DomainModel.IDomainObject>'

爲什麼IOrder從IDomainObject派生時會出現此錯誤?

+0

您使用的是哪個版本的框架? – Aliostad 2010-09-09 12:27:55

回答

3

這需要.NET 4的協方差的支持,這將是這樣表述:

interface IFinder<out T> ... 

如果沒有.NET 4中(VS 2010),你的運氣了。

+0

是的我已經在.NET 3.5和VS 2008中完成了這個工作。 但是我只是嘗試將它更新到VS 2010,並將項目更新到.NET 4,而且我仍然遇到同樣的錯誤。 – 2010-09-09 12:36:55

+0

...但這可能是因爲IList或我自己的IFinder不支持協方差? – 2010-09-09 12:42:03

+1

@Paw:您必須將'out'指示符添加到您的接口的泛型類型參數中。 – 2010-09-09 12:49:44