我有这个类和接口:
public class BasicListViewModel<T> : ObservableObject , IListViewOperations<T>,IUpdateHandler
where T : bre.Domein.Entity
public interface IListViewOperations<T> where T:bre.Domein.Entity
public class IngredientInVoorraad : bre.Domein.Entity
编译器为此代码给出以下错误:
参数1:无法从“ bre.Presentatie.BasicListViewModel”转换为“ bre.Presentatie.IListViewOperations”
var viewModelsPages = new List<IListViewOperations<Entity>>();
var allIngredientsViewModel = new BasicListViewModel<IngredientInVoorraad>(()=>RepositoryFactory.getIngredientInVoorraadRepository().FindAll());
viewModelsPages.Add(allIngredientsViewModel); //COMPILE ERROR OCCURS HERE
我不明白为什么它不起作用:BasisListViewModel继承自IListViewOperations,而IngredientInVoorraad继承自Entity。
谁能解释为什么这是错误的,以及如何在保持接口和通用性的同时进行修复?
感谢您的帮助!
最佳答案
您的介面IListViewOperations不是协变的。如果将接口定义设置为IListViewOperations<out T>
,则接口将变为协变,并且此类转换将变为隐式。在以下MSDN文章中进一步阅读协方差和协方差:http://msdn.microsoft.com/en-us/library/ee207183.aspx
关于c# - 使用双重通用性时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23763463/