如何从财产中获得平衡

时间:2015-05-15 11:46:44

标签: c#

我有一个类包含交易的简单数据,其中一个字段为Amount,它保持交易金额加或减,我的问题是如何在每笔交易之后计算余额而不使用linq ,I我想知道如何仅仅通过纯编程来完成。

这是交易类的代码:

using System;

namespace AccountSummary
{
    class masterTransData
    {
        public long TransNo { get; set; }
        public DateTime TransDate { get; set; }
        public long AccountNo { get; set; }
        public decimal Amount { get; set; }

        public decimal getBalance()
        {
            decimal[] Balance;
            masterTransData[] mtd = transData();
            for(int i=0; i<mtd.length; i++)
            {
                Balance[i] += mtd[i].amount; 
            }

            return Balance;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

据推测,您的余额是总金额的单一值,而不是数组。

你问过没有LINQ的解决方案,但我认为展示这种关系可能是有用的。在LINQ中,您将使用Sum扩展方法:

masterTransData[] mtd = transData();
var balance = mtd.Sum(x => x.amount);

Sum并不是特别神奇。一旦它投射了你的物品以获得IEnumerable<decimal>,那么在内部,它就是这样做的:

decimal sum = 0;
foreach (decimal v in source) 
{
    sum += v;
}
return sum;

所以编写代码的必要方法是:

masterTransData[] mtd = transData();
decimal balance = 0;
foreach (var d in mtd) 
{
    balance += d.amount;
}
return balance;

LINQ在混合中添加的内容是,它将 intent 实现分开。这极大地提高了可读性。我可以看看这两行示例并说'好吧,我们总结所有金额'。如果我想更详细地了解发生了什么,我可以深入研究并检查方法的作用。另一种方法是阅读6行代码并不得不推断它正在做什么。

答案 1 :(得分:0)

GetBalance方法更改为:

public decimal GetBalance()
{
    decimal balance;
    masterTransData[] mtd = transData();
    for(int i=0; i<mtd.length; i++)
    {
        balance += mtd[i].amount; 
    }

    return balance;
}

答案 2 :(得分:0)

您必须使用普通十进制变量来累积余额值

using System;

namespace AccountSummary
{
    class masterTransData
    {
        public long TransNo { get; set; }
        public DateTime TransDate { get; set; }
        public long AccountNo { get; set; }
        public decimal Amount { get; set; }

        public decimal getBalance()
        {
            decimal balance = 0M;
            masterTransData[] mtd = transData();
            for(int i=0; i<mtd.length; i++)
            {
                balance += mtd[i].amount; 
            }

            return balance;
        }
    }
}