C# 将表达式作为参数传递
我正在尝试构建一个通用的C# 将表达式作为参数传递,c#,generics,C#,Generics,我正在尝试构建一个通用的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(groupByExpr
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);
}
var result=GenericGroupBy(dataList,g=>g.Id);
公共对象GenericGroupBy(对象数据,Func groupByExpression)
{
返回((列表)数据).GroupBy(groupByExpression);
}
但是我不能让它工作
如何传递表达式,如
g=>g.Id
?目前存在两个问题:
- 您的方法需要一个
,我怀疑Func
会失败,因为您的g=>g.Id
属性不是Id
bool
- 您当前正在指定
作为类型参数,而我怀疑您确实想要List
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);
}
请注意,我还将强制转换从
List
更改为IEnumerable
——您不需要将其转换为List
,那么为什么要转换为它呢?目前,您的方法接受一个参数,该参数接受t
,并返回一个bool
。。。我怀疑g.Id
是一个傻瓜。同样,我怀疑您想要的类型参数是DTO
,而不是List
。dataList
变量的类型是什么(不是实际的运行时类型,只是编译时类型)?如果您静态地知道T
,为什么不将data
定义为List
而不是object
?@JonSkeet将List
更改为DTO
并将Func
更改为Func
。你能把这个评论作为回答吗,我会接受的…@Nalaka526当时真的没有理由使用这个方法。您应该只调用GroupBy
。这种方法根本没有增加任何实际价值。它所做的只是通过将返回类型强制转换为对象
,将值去掉,使其几乎一文不值。
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);
}