所以我有這種方法返回一個泛型類型;該方法是該接口所要求的。泛型類型TOutput被限制爲List。儘管我的返回值是一個List,但它仍然不能編譯。錯誤僅在返回語句中(無法轉換爲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; }
}
爲什麼'TOutput'應該是它自己的類?你希望有'List'的_subclasses_嗎?是否可以更改簽名以完全轉儲'TOutput',並且只需要返回一個'IEnumerable '? –
我其實已經嘗試過IEnumerable,原來的結果相同 – Sinaesthetic