为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
千万里不及你 2022-08-20 17:11:42
为了澄清我的标题,我将给你一个我拥有什么和我想做什么的例子(实际上我想重构一些代码)。因此,首先我将对象添加到列表中: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() 扩展添加更多参数吗 - 如果是,如何添加?
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

您可以简单地使用(用于获取一系列值并将其减少到单个值):.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


查看完整回答
反对 回复 2022-08-20
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您可以添加以下扩展名


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



查看完整回答
反对 回复 2022-08-20
  • 2 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号