假设我有以下功能
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
我想为像 OrderBy = e=>e.ID
这样的表达式传递一个默认参数,以便如果未定义此参数,则默认为按 id 排序。
这怎么可能?
假设我有以下功能
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
我想为像 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);
...
}
(假设类型ID
是int
)
T
...但如果不是,演员表将失败int
。请注意,双重转换是为了让“内部”部分最初告诉编译器要将 lambda 表达式转换为哪个表达式树,而“外部”部分则强制它成为T
.
我很想改用重载:
public Whatever GetAllByAge(int age)
{
return GetAllByAge(age, e => e.ID);
}