c# - 无法从用法中推断出类型参数

标签 c# generics

我对泛型还很陌生,所以我想知道是否有人可以解释我遇到的以下问题。在 ASP.NET MVC 应用程序的几乎所有 Controller 中,我需要返回一个过滤列表(以填充 JqGrid,因为它发生在用户将指定某些过滤条件的地方)。每个 Controller 列表方法将返回一个不同的 IQueryable 列表,因此我着手创建一个通用方法来处理这个问题。

当我创建我的方法时,我在一个特定的 Controller 中定义了它。一切都编译好了,我得到了我预期的结果。因为我想从我的所有 Controller 调用此方法,所以我假设我可以简单地创建另一个静态类,将方法放在那里,然后从我的所有 Controller 调用该方法。但是如果我尝试将该方法移动到调用它的 Controller 以外的任何其他地方,编译器会提示该方法的最后一行并出现以下错误:

方法的类型参数 System.Linq.Queryable.Where<TSource>(System.Linq.IQueryable<TSource>, System.Linq.Expressions.Expression<System.Func<TSource,bool>>) 不能从用法中推断出来。 尝试明确指定类型参数。

public static IQueryable<T> FilteredList<T>(IQueryable<T> list, string filters)
{
     var qb = new QueryBuilder<T>();
     var whereClause = qb.BuildWhereClause(filters);
     return list.Where(whereClause);
}

我试过了 list<T>.Where(whereClause)list.Where<T>(whereClause)以及几乎所有其他组合,任何人都可以向我解释我哪里出错了。

最佳答案

这表明您的 BuildWhereClause方法未返回适当的类型。

编译器正在尝试推断 TSource 的类型来自 listwhereClause .现在whereClause 应该Expression<Func<T, bool>>但我怀疑不是。将鼠标悬停在 var 上在 whereClause 的声明中找出它到底是什么。我不推荐使用 var当返回类型不明显时。

关于c# - 无法从用法中推断出类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504778/

相关文章:

c# - 如何将 T 转换为类以匹配 "where T : class"约束?

c# - 使用 ViewData 将数据从 Controller 传递到 View

c# - Linq to sql 选择一个新类

c# - 查找包含最接近属性值的对象的列表索引

java - Java Comparator.comparing 方法中泛型的语义

java - 从接口(interface)实现泛型方法而不困惑?

Java泛型多次持有相同类型的参数

java - 如何获取对象的类并将其用作泛型类的参数?

c# - 最佳实践 如何使用 .net CORE 隔离动态代码/程序集

c# - LuaInterface - 如何从任何路径加载程序集?