0

所以我有这个返回泛型类型的方法;接口需要此方法。泛型类型 TOutput 被限制为 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; }
}
4

1 回答 1

0

Execute应该返回 aTOutput但它返回的是 a List of TOutputType。ATOutput被限制为 aList<TOutputType>但 aList<TOutputType>不被限制为 a TOutput

尝试实例result化为:

var result = new TOutput();

看看情况如何。

于 2013-06-25T01:01:40.490 回答