我想创建一些通用方法,例如下面的代码:

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>"

最佳答案

Generic constraints将通过AND合并,因此where T : IBaseModel, IList<IBaseModel>表示T应同时实现IBaseModelIList<IBaseModel>

您需要创建两个方法:

public async Task<T> Get<T>(string url) where T : IBaseModel
public async Task<IList<T>> GetList<T>(string url) where T : IBaseModel

09-11 19:34