尽管有约束,但 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; }
}

尽管有约束,但 return 语句不满足泛型返回类型

Execute应该返回一个TOutput,但它返回的是TOutputTypeListTOutput被约束为List<TOutputType>List<TOutputType>不被约束为TOutput

尝试将result实例化为:

var result = new TOutput();

看看情况如何。