【发布时间】:2018-12-30 12:19:20
【问题描述】:
我想创建一些通用方法,如下面的代码:
public async Task<T> Get<T>(string url) where T : IBaseModel, IList<IBaseModel>
显然我想支持可枚举集合以及从IBaseModel 接口驱动的单个对象。
方法定义没问题,但是在使用时我会收到以下错误:
await myClass.Get<List<DrivedClassFromBaseModel>>("some url");
There is no implicit conversion from "System.Collection.Generic.List<DrivedClassFromBaseModel> to System.Collection.Generic.IList<IBaseModel>"
【问题讨论】:
-
您不能将派生类型的列表转换为具有基类的列表。这将允许将具有相同基类的其他类型添加到该列表中。
-
List<DrivedClassFromBaseModel>怎么可能是IBaseModel? -
你应该可以做 Task
- > Get
(string url) where T : IBaseModel -
@Reza Aghaei DrivedClassFromBaseModel:IBaseModel
-
我明白了,但
DrivedClassFromBaseModel:IBaseModel并不意味着List<DrivedClassFromBaseModel>是IBaseModel。正如答案中已经提到的那样,where T : IBaseModel, IList<IBaseModel>意味着T应该同时实现IBaseModel和IList<IBaseModel>。
标签: c# .net generics generic-collections generic-constraints