我有一个像这样的方法定义:
public List<TEntity> GetAll<T> (
params Expression<Func<TEntity, T>>[] fieldsToExclude )
{
...
}
但是当我这样做的时候我不能有不同的类型。
所以我把它改成了这个:
public List<TEntity> GetAll<T1, T2, T3, T4, T5, T6, T7, T8> (
Expression<Func<TEntity, T1>> field1ToExclude,
Expression<Func<TEntity, T2>> field2ToExclude = null,
Expression<Func<TEntity, T3>> field3ToExclude = null,
Expression<Func<TEntity, T4>> field4ToExclude = null,
Expression<Func<TEntity, T5>> field5ToExclude = null,
Expression<Func<TEntity, T6>> field6ToExclude = null,
Expression<Func<TEntity, T7>> field7ToExclude = null,
Expression<Func<TEntity, T8>> field8ToExclude = null )
{
...
}
我尝试使用它:
var allItems = GetAll(p => p.SomeProperty1, p => p.SomeProperty2);
但现在客户方面说:
无法从用法推断出类型参数'...'。
这是有道理的,因为我根本不使用可选的参数。当我给出所有参数时它工作正常,但是可选性会使它错误。
使用伸缩参数创建许多方法是一种出路。但我想也必须有一个更简洁的方式。我该如何提供此功能?
答案 0 :(得分:1)
由于你可以解决返回Object
的表达式,你可以简单地省略泛型参数并改用Object
:
public List<TEntity> GetAll<TEntity> (params Expression<Func<TEntity, Object>>[] fieldsToExclude)
{
...
}