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

时间:2013-06-25 00:56:01

标签: c# generics interface

所以我有这个方法返回泛型类型;接口需要此方法。通用类型TOutput被限制为List。尽管我的返回值是List,但它仍然无法编译。错误仅在return语句处(无法转换为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; }
}

1 个答案:

答案 0 :(得分:0)

Execute应该返回TOutput,而是返回List TOutputTypeTOutput被限制为List<TOutputType>,但List<TOutputType>不限于TOutput

尝试将result实例化为:

var result = new TOutput();

看看情况如何。