将表达式作为参数传递
本文关键字:参数传递 表达式 | 更新日期: 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>
,所以为什么要转换为那个?