所以我有这个方法返回泛型类型;接口需要此方法。通用类型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; }
}
答案 0 :(得分:0)
Execute
应该返回TOutput
,而是返回List
TOutputType
。 TOutput
被限制为List<TOutputType>
,但List<TOutputType>
不限于TOutput
。
尝试将result
实例化为:
var result = new TOutput();
看看情况如何。