次の関数があるとします
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.ID
T
提供された次のようにして、これを回避できます。
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);
}