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

Optional generic typed parameters cannot be inferred

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

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

但现在在客户端它说:

Type arguments '...' cannot be inferred from the usage.

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

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

由于您可以接受返回 Object 的表达式,您可以简单地省略通用参数并使用 Object 代替:

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