关于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);

是有什么顾虑么?
...全文
329 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
  • 打赏
  • 举报
回复
标题不小心写乱了...
内容概要:本文围绕双机并联虚拟同步发电机(VSG)在微电网中的功率分配、黑启动及预同步控制展开深入研究,重点提出了一种结合惯量与阻尼协同自适应控制的策略,以提升微电网在孤岛与并网模式下的频率稳定性及动态响应性能。通过Simulink搭建双VSG并联系统仿真模型,系统实现了有功/无功功率均分、微电网黑启动过程模拟、并网前的预同步控制,并引入虚拟阻抗技术以优化环流抑制。研究涵盖控制策略设计、系统建模、参数整定与仿真验证全过程,旨在增强微电网运行的可靠性、稳定性和自主恢复能力。; 适合人群:具备电力系统、微电网、电力电子及自动控制等相关专业知识,从事新能源发电、分布式能源系统、VSG控制技术等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握双机VSG并联系统的建模与仿真方法;②深入理解微电网黑启动机制与预同步控制的实现流程;③研究VSG惯量-阻尼自适应调控对系统频率稳定性和动态性能的影响;④为构网型储能、微电网能量管理系统及VSG控制器的设计与优化提供可靠的仿真验证平台。; 阅读建议:建议结合Simulink仿真模型同步学习,重点关注VSG控制环路、虚拟阻抗设计及预同步逻辑的实现细节;在复现过程中应逐步调试各功能模块,理解黑启动与预同步的时序逻辑,并通过改变负载、线路参数或初始频率偏差等方式验证系统的鲁棒性与适应性。

111,129

社区成员

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

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

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