关于public static 关于IEnumerable Join()

mnxm 2014-10-25 02:21:13
public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this IEnumerable<TOuter> outer, IEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector, Func<TInner, TKey> innerKeySelector, Func<TOuter, TInner, TResult> resultSelector, IEqualityComparer<TKey> comparer);
的IEqualityComparer<TKey> comparer参数是不是有些别扭?难道每次用这个方法时还要去临时写个继承自IEqualityComparer<TKey>接口的类然后实例化传递进去么?

为何不以这种方式实现
public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this IEnumerable<TOuter> outer, IEnumerable<TInner> inner, Func<TOuter, TInner, bool> predicate, Func<TOuter, TInner, TResult> resultSelector);

是有什么顾虑么?
...全文
267 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-10-25
  • 打赏
  • 举报
回复
再说,有重载形式不需要提供comparer的,而基本类型,比如int string都支持,即便你选多个字段,匿名类也实现了comparer,所以很少有机会要自己定义。
threenewbee 2014-10-25
  • 打赏
  • 举报
回复
这涉及到Join的内部实现。 简单来说,Join是根据你需要连接的键将两边的数据分别装入两个类似字典的集合,再根据字典的Key匹配得到结果,所以只要遍历一次两边的数据(左边+右边)即可。 如果是你说的那样,就要依次让左边的每个元素匹配右边的每个元素,需要遍历左边*右边这么多的数据,性能有天壤之别。 你说的那个,LINQ已经支持了,比如 form a in table1 from b in table2 where a.xx == b.xx select new { a, b }
mnxm 2014-10-25
  • 打赏
  • 举报
回复
标题不小心写乱了...

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧