首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于IEqualityComparer<T>有没有简便的写法解决方法

2013-03-17 
关于IEqualityComparerT,有没有简便的写法.net提供了Func之类的简便写法,想问下这个有没有类似的。。。问

关于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表达式和泛型委托用的比较舒畅,所以感觉到之前的做法有点繁琐而已。
这个没有办法...
[解决办法]

引用:
我在用linq的groupby的时候,需要用临时确定的方式判断对象是否相等,于是想用带IEqualityComparer参数的groupby的重载
                wc.Procedures.GroupBy(procedure => procedure, selector);

这是哪里杀出来的李鬼呢?你是从哪里开始“想”的?
[解决办法]
直接构建查询表达式
用MemberAccessExpression代替selector

热点排行