尽管有约束,但 return 语句不满足泛型返回类型
本文关键字:语句 不满足 泛型 返回类型 return 约束 | 更新日期: 2023-09-27 18:19:41
所以我有这个返回泛型类型的方法;接口需要这个方法。泛型类型"图普特"被约束为列表。尽管我的返回值是一个列表,但它仍然无法编译。错误仅在返回语句处(无法转换为 TOuput(。有什么想法吗?
public class QueryCollectionDataSourceBase<TInput, TOutputType, TOutput> : IQueryCollectionDataSource<TInput, TOutputType, TOutput>
where TOutput : List<TOutputType>
{
public virtual Func<TInput, SqlParameter[]> ParameterAdapter { get; private set; }
public virtual Func<IDataRecord, TOutputType> ObjectAdapter { get; private set; }
protected QueryCollectionDataSourceBase(Func<TInput, SqlParameter[]> parameterAdapter,
Func<IDataRecord, TOutputType> objectAdapter)
{
ParameterAdapter = parameterAdapter;
ObjectAdapter = objectAdapter;
}
public TOutput Execute(TInput request)
{
using (var rdr = SqlHelper.ExecuteReader(
DatabaseConnection.ConnectionString,
CommandType.StoredProcedure,
"dbo.usp_ws_act_UserByAccountIDGet",
ParameterAdapter(request)))
{
var result = new List<TOutputType>();
while (rdr.Read())
{
result.Add(ObjectAdapter(rdr));
}
return result;
}
}
}
public interface IQueryCollectionDataSource<in TRequest, out TListType, out TOutput> : IQueryDataSource<TRequest, TOutput>
where TOutput : List<TListType>
{
Func<IDataRecord, TListType> ObjectAdapter { get; }
}
Execute
应该返回一个TOutput
,但它返回的是TOutputType
的List
。TOutput
被约束为List<TOutputType>
但List<TOutputType>
不被约束为TOutput
。
尝试将result
实例化为:
var result = new TOutput();
看看情况如何。