亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 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 關注
  • 121 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號