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を返すはずですTOutputが、代わりにList ofを返していTOutputTypeます。ATOutputは a になるように制約されていますList<TOutputType>が、aList<TOutputType>は になるように制約されていませんTOutput

次のようにインスタンス化してみてくださいresult

var result = new TOutput();

そしてそれがどうなるか見てください。

于 2013-06-25T01:01:40.490 に答える