【发布时间】:2021-01-21 14:13:48
【问题描述】:
应该在 Trade 对象初始化之后立即调用 CalcTradePrice 方法。现在,它在此之前被调用,这导致了一个异常:
System.DivideByZeroException: '试图除以零。'
var trade = new Trade
{
Pair = pair,
OpenRate = buyCandle.Close,
OpenDate = buyCandle.OpenTime,
Amount = 12345,
OpenFee = _backtestOptions.OpenFee,
CloseFee = _backtestOptions.CloseFee,
IsOpen = true
};
我知道我可以在初始化之后手动调用该方法,就像这样:
var trade = new Trade
{
Pair = pair
};
CalcTradePrice();
或创建一个执行它的派生类,但我不想这样做。有什么建议吗?
贸易类:
public class Trade
{
public string Pair { get; set; }
public decimal OpenRate { get; set; }
public decimal CloseRate { get; set; }
public DateTime OpenDate { get; set; }
public DateTime CloseDate { get; set; }
public decimal OpenTradePrice { get; set; }
public decimal Amount { get; set; }
public decimal OpenFee { get; set; }
public decimal CloseFee { get; set; }
public SellType SellType { get; set; }
public Trade()
{
CalcTradePrice();
}
public void CalcTradePrice()
{
this.OpenTradePrice = ... // DivideByZeroException because all elements are null at that moment
}
}
【问题讨论】:
-
这能回答你的问题吗? Try catch in c# for divide by zero error
-
Amount = currentBalance / buyCandle.Close,使Amount成为一个函数,而不是一个属性。将CurrentBalance存储为属性。 -
@SergeyBerezovskiy,忽略 Amount 属性,事实并非如此,因为我试图将其设置为硬编码值。问题是构造函数在
new Trade { Pair = pair, .... }之前被调用。
标签: c# oop design-patterns