次の関数があるとします
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
OrderBy = e=>e.ID のような Expression のデフォルト パラメータを渡したい
ので、このパラメータが定義されていない場合、デフォルトは ID でソートされます。
これはどのように可能ですか?
次の関数があるとします
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
OrderBy = e=>e.ID のような Expression のデフォルト パラメータを渡したい
ので、このパラメータが定義されていない場合、デフォルトは ID でソートされます。
これはどのように可能ですか?
ここには 2 つの問題があります。
e => e.IDT提供された次のようにして、これを回避できます。
public Whatever GetAllByAge<T>(int age,
Expression<Func<Person, T>> orderBy = null)
{
orderBy = orderBy ?? (Expression<Func<Person, T>>)
(Expression<Func<Person, int>>)(e => e.Id);
...
}
ID( のタイプが であると仮定int)
T...しかし、そうでない場合、キャストは失敗しintます。二重キャストは、「内側」の部分がラムダ式を変換する式ツリーをコンパイラに最初に伝えるためのものであり、「外側」の部分はそれを強制的にT.
代わりにオーバーロードを使用したくなるでしょう:
public Whatever GetAllByAge(int age)
{
return GetAllByAge(age, e => e.ID);
}