猿问

使用 LINQ/扩展方法从一个列表中一次添加两个不同的值

为了澄清我的标题,我将给你一个我拥有什么和我想做什么的例子(实际上我想重构一些代码)。


因此,首先我将对象添加到列表中:


var Impedances = new List<Impedance>()


跟:


Impedances.Add(new Impedance (R,X))- R 和 X 是双精度值。


稍后,代码循环通过一个大列表的“LinesOut”(搜索其他可能的阻抗对象),然后执行以下计算:


var sumRez = Impedances.Select(x => x.R).Sum();

var sumReak = Impedances.Select(y => y.X).Sum();

var result = (c * model.voltageUDN) / (Math.Sqrt(3) * GetModule(sumRez, sumReak));

结果显示在视图中。问题是


我怎样才能将此代码更改为具有较少的声明,但在一行中调用sumRez和sumReak的Sum()。我应该向 Select() 扩展添加更多参数吗 - 如果是,如何添加?


千万里不及你
浏览 147回答 2
2回答

子衿沉夜

您可以简单地使用(用于获取一系列值并将其减少到单个值):.Aggregatevar sums = Impedances.Aggregate((i0, i1) => new Impedance() { R = i0.R + i1.R, X = i0.X + i1.X });var result = (c * model.voltageUDN) / (Math.Sqrt(3) * GetModule(sums.R, sums.X));创建新实例的方式可能有所不同,但基本上就是这样。Impedance

蓝山帝景

您可以添加以下扩展名public static class ImpedanceExtensions{&nbsp; &nbsp; public static Impedance SumImpedance(this IEnumerable<Impedance> collection)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var totalImpedance = new Impedance();&nbsp; &nbsp; &nbsp; &nbsp; foreach (Impedance impedance in collection)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; totalImpedance.X += impedance.X;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; totalImpedance.R += impedance.R;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return totalImpedance;&nbsp; &nbsp; }}用法var sumImpedance = Impedances.SumImpedance();var result = (c * model.voltageUDN) / (Math.Sqrt(3) * GetModule(sumImpedance.R, sumImpedance.X));
随时随地看视频慕课网APP
我要回答