2

一般的なジェネリック メソッドは、私にとって初めてのことです。ジェネリック型の Collection を返すメソッドが必要ですが、同じジェネリック型のコレクションも取り、

Expression<Func<GenericType, DateTime?>>[] Dates 

パラメータ。次の関数全体で T は同じ型である必要があるため、現在は (簡略化されたバージョン) を使用していました。

private static Collection<T> SortCollection<T>(Collection<T> SortList, Expression<Func<T, DateTime>>[] OrderByDateTime)
{
    return SortList.OrderBy(OrderByDateTime[0]);
}

しかし、私はエラーを受け取っています:

エラー: メソッド 'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumberable, System.Func)' の型引数は、使用法から推測できません。型引数を明示的に指定してみてください。

とにかくこれを行うことはありますか?

4

2 に答える 2

6

2回答えて申し訳ありませんが、これは合法的に別の解決策です。

あなたは を渡していますExpression<Func<T, DateTime>>が、Orderby はFunc<T, DateTime>

式をコンパイルすることができます:

return new Collection<T>(SortList.OrderBy(OrderByDateTime[0].Compile()).ToList());

または、関数をそのまま引数として渡します。

private static Collection<T> SortCollection<T>(Collection<T> SortList, Func<T, DateTime>[] OrderByDateTime)
{
    return new Collection<T>(SortList.OrderBy(OrderByDateTime[0]).ToList());
}

msdn の Expressions を読むことをお勧めします

于 2009-09-24T12:22:26.153 に答える
4

この状況では、コンパイラは OrderBy メソッドに指定する予定の型引数を特定できないため、明示的に指定する必要があります。

SortList.OrderBy<T, DateTime>(OrderByDateTime[0])

ToList()Collection を返したい場合は、おそらく呼び出したいと思うでしょう

于 2009-09-24T12:12:10.883 に答える