Kar*_*rim 3 c# expression-trees default-parameters
假设我有以下功能
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
Run Code Online (Sandbox Code Playgroud)
我想为表达式传递一个默认参数,如 OrderBy = e=>e.ID,
以便如果未定义此参数,则默认值是按 id 排序。
这怎么可能?
这里有两个问题:
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);
...
}
Run Code Online (Sandbox Code Playgroud)
(假设类型ID是int)
...但如果T不是,则演员表将失败int。请注意,双重转换用于“内部”部分最初告诉编译器您要将 lambda 表达式转换为哪种表达式树,然后“外部”部分将强制其成为T.
我很想改用重载:
public Whatever GetAllByAge(int age)
{
return GetAllByAge(age, e => e.ID);
}
Run Code Online (Sandbox Code Playgroud)