无法推断可选的泛型类型参数

时间:2017-02-16 08:43:12

标签: c# generics optional-parameters

我有一个像这样的方法定义:

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);

但现在客户方面说:

  

无法从用法推断出类型参数'...'。

这是有道理的,因为我根本不使用可选的参数。当我给出所有参数时它工作正常,但是可选性会使它错误。

使用伸缩参数创建许多方法是一种出路。但我想也必须有一个更简洁的方式。我该如何提供此功能?

1 个答案:

答案 0 :(得分:1)

由于你可以解决返回Object的表达式,你可以简单地省略泛型参数并改用Object

public List<TEntity> GetAll<TEntity> (params Expression<Func<TEntity, Object>>[] fieldsToExclude)
{
    ...
}