3

次の関数があるとします

Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)  

OrderBy = e=>e.ID のような Expression のデフォルト パラメータを渡したい
ので、このパラメータが定義されていない場合、デフォルトは ID でソートされます。
これはどのように可能ですか?

4

1 に答える 1

5

ここには 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);
}
于 2011-04-16T22:38:25.190 に答える