将表达式作为参数传递

本文关键字:参数传递 表达式 | 更新日期: 2023-09-27 17:49:27

我试图建立一个通用的GroupBy方法,我想它应该是这样的

var result = GenericGroupBy<List<DTO>>(dataList, g=>g.Id);
public object GenericGroupBy<T>(object data, Func<T, bool> groupByExpression)
{
    return ((List<T>)data).GroupBy(groupByExpression);
}

但是我不能使它工作。

如何传递像g=>g.Id这样的表达式?

将表达式作为参数传递

目前存在两个问题:

  • 你的方法期望Func<T, bool>,我怀疑g => g.Id失败,因为你的Id属性不是bool
  • 你目前指定List<DTO>作为类型参数,当我怀疑你真的想要DTO

考虑到你的注释,这将工作:

var result = GenericGroupBy<DTO>(dataList, g => g.Id);
public object GenericGroupBy<T>(object data, Func<T, int> groupByExpression)
{
    return ((List<T>)data).GroupBy(groupByExpression);
}

…但我想让它更通用一点除非你总是想要按int:

分组
var result = GenericGroupBy<DTO, int>(dataList, g => g.Id);
public object GenericGroupBy<TElement, TKey>
    (object data, Func<TElement, TKey> groupByExpression)
{
    return ((IEnumerable<TElement>)data).GroupBy(groupByExpression);
}

请注意我是如何将转换从List<T>更改为IEnumerable<T>的-您不需要它是List<T>,所以为什么要转换为那个?