关于IEqualityComparer<T>,有没有简便的写法
.net提供了Func<>之类的简便写法,想问下这个有没有类似的。。。
问题是这样:我在用linq的groupby的时候,需要用临时确定的方式判断对象是否相等,于是想用带IEqualityComparer参数的groupby的重载
wc.Procedures.GroupBy(procedure => procedure, selector);
但selector无法直接传递表达式或匿名函数,只能是类,只能每遇到一次就定义一个类。。。于是我只好又定义了一个类selector
class selector<T> : IEqualityComparer<T>
{
Func<T, T, bool> pred;
public selector(Func<T, T, bool> pred)
{
this.pred = pred;
}
public bool Equals(T x, T y)
{
throw new NotImplementedException();
}
public int GetHashCode(T obj)
{
return obj.GetHashCode();
}
}
然后把new一个这个类把Func<T, T, bool>传进去,最后还要把new出来的对象传进groupby
问题是解决了,但感觉有点丑,所以想问下正常的写法是怎么样的。。。
------解决方案--------------------正常写法就应该是定义一个类,说的好听点叫做定义一个比较器。
可以说,这是.net 1.X 2.0 阶段比较喜欢的方式。只是现在的lamda表达式和泛型委托用的比较舒畅,所以感觉到之前的做法有点繁琐而已。
这个没有办法...
------解决方案--------------------
这是哪里杀出来的李鬼呢?你是从哪里开始“想”的?
------解决方案--------------------直接构建查询表达式
用MemberAccessExpression代替selector