我有一个类包含交易的简单数据,其中一个字段为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;
}
}
}
答案 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;
}
}
}