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

C# 无法推断可选的泛型类型参数,c#,generics,optional-parameters,C#,Generics,Optional Parameters,我有这样一个方法定义: public List<TEntity> GetAll<T> ( params Expression<Func<TEntity, T>>[] fieldsToExclude ) { ... } 但现在在客户端,它说: 无法从用法推断类型参数“…” 这很有意义,因为我根本不使用可选参数。当我给出所有参数时,它工作正常,但可选性使它出错 创建许多具有伸缩参数的方法是一条出路。但我想一定还有更整洁的方法。如何提供

我有这样一个方法定义:

public List<TEntity> GetAll<T> (
    params Expression<Func<TEntity, T>>[] fieldsToExclude )
{
    ...
}
但现在在客户端,它说:

无法从用法推断类型参数“…”

这很有意义,因为我根本不使用可选参数。当我给出所有参数时,它工作正常,但可选性使它出错


创建许多具有伸缩参数的方法是一条出路。但我想一定还有更整洁的方法。如何提供此功能?

既然您可以使用返回
对象的表达式,您只需省略泛型参数并使用
对象

public List<TEntity> GetAll<TEntity> (params Expression<Func<TEntity, Object>>[] fieldsToExclude)
{
    ...
}
public List GetAll(参数表达式[]fieldsToExclude)
{
...
}

您必须使用
params Expression[]fieldsToExclude
并(假设您将这些表达式传递给的是EntityFramework提供程序)处理实际的表达式类型转换。基本上没有解决方案。典型的解决方法是使用
params Expression[]
并处理
Expression.Convert
引入值类型。它不是EntityFramework提供程序,因此我不必处理类型转换。我只是使用字段的名称,实际上我没有使用任何
t
s。因此,这实际上应该是可行的。你应该把它贴成answer@haim770。作为旁白,调用一个方法
GetAll
,然后把你不想要的东西传递给它,这是非常不直观的。考虑一些类似于<代码> GETALLUD排除属性< /代码>。这是一个有建设性的评论:JeroenMostert,谢谢。
var allItems = GetAll(p => p.SomeProperty1, p => p.SomeProperty2);
public List<TEntity> GetAll<TEntity> (params Expression<Func<TEntity, Object>>[] fieldsToExclude)
{
    ...
}