簡體   English   中英

C#foreach循環的條件和/或計算錯誤

[英]Condition and/or calculation bug with a C# foreach loop

我在代碼隱藏文件中有一個foreach循環,用於評估和計算網格中顯示的每個項目,並更新頁面上的總費用。 問題在於計算只是返回答案的一部分。 它返回的部分是正確的,但是沒有執行完整的計算。 我認為找到第一個條件會失敗。

業務邏輯是這樣的:如果asset的每月成本或總成本小於或等於$ 2000,則該asset的成本為$ 1007.95期限,而不管其簽出了多少個月(請參閱網格中的duration器) )。

如果asset的每月成本或總成本大於$ 2000,則將該asset的成本乘以其成本乘以檢出的月數( duration )。

我已經繼承了這個錯誤和項目,所以我包括了foreach的完整代碼,並在下面提供了兩個支持的屏幕截圖(我不得不混淆了屏幕截圖中的某些信息,但顯示了相關元素)。

編碼:

    private void PopulateFormFees(CheckOut c)
    {
        double dblTotalMonthlyFee = 0;
        double dblTotalCharge = 0; 

        c.CheckOutAssets.ForEach(delegate(CheckOutAsset coa)
        {
            if (coa.UsageFee < 2001)
            {
                dblTotalMonthlyFee = 1007.95;
                dblTotalCharge = 1007.95 * 1;
            }

            if (coa.UsageFee > 2000)
            {
                dblTotalMonthlyFee += coa.UsageFee;
                dblTotalCharge += (coa.UsageFee * coa.DurationMonths);
            }
        });

屏幕截圖:

屏幕快照1在初始視圖上顯示表單數據。 在這里,我們可以看到“總費用” label顯示的是$ 5,132.95,這表明foreach循環正在為$ 4,125.00的費用和一項$ 1,007.95的費用進行計算,而其他項則沒有。

總費用錯誤示例1

屏幕截圖2顯示了一個示例,其中增加了每個項目的duration 在這里,我們看到“總費用” label顯示的是$ 21,632.95,這表明foreach循環正在正確計算$ 4,125.00的費用和一項$ 1,007.95的費用,但其他項則沒有。

總費用錯誤示例2

謝謝您的考慮和關注。

這只會覆蓋之前存儲在這些變量中的所有值:

dblTotalMonthlyFee = 1007.95;
dblTotalCharge = 1007.95 * 1;

正確的方法是添加到當前值,如if的另一個分支:

dblTotalMonthlyFee += 1007.95;
dblTotalCharge += 1007.95 * 1;

更改

dblTotalMonthlyFee = 1007.95;
dblTotalCharge = 1007.95 * 1;

dblTotalMonthlyFee += 1007.95;
dblTotalCharge += 1007.95 * 1;

它應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM