为澄清我的头衔,我将举一个例子说明我拥有的东西和我想做的事情(实际上,我想重构一些代码)。
所以首先我将对象添加到列表中
var Impedances = new List<Impedance>()
具有:
Impedances.Add(new Impedance (R,X))
-R和X是双精度值。
稍后在代码上循环遍历“ LinesOut”的大列表(搜索其他可能的Impedance对象),然后执行以下计算:
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()扩展名添加更多参数-如果是,怎么办?
谢谢。
答案 0 :(得分:1)
您可以简单地使用.Aggregate
(用于获取一系列值并将其减少为单个值):
var 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
实例的方式可能有所不同,但这基本上就是它的工作方式。
答案 1 :(得分:0)
您可以添加以下扩展名
public static class ImpedanceExtensions
{
public static Impedance SumImpedance(this IEnumerable<Impedance> collection)
{
var totalImpedance = new Impedance();
foreach (Impedance impedance in collection)
{
totalImpedance.X += impedance.X;
totalImpedance.R += impedance.R;
}
return totalImpedance;
}
}
用法
var sumImpedance = Impedances.SumImpedance();
var result = (c * model.voltageUDN) / (Math.Sqrt(3) * GetModule(sumImpedance.R, sumImpedance.X));