首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >初始化后调用构造函数中的方法。

初始化后调用构造函数中的方法。
EN

Stack Overflow用户
提问于 2021-01-21 14:13:48
回答 3查看 67关注 0票数 0

CalcTradePrice方法应在Trade初始化后立即调用。现在,在此之前正在调用它,这导致了一个例外:

System.DivideByZeroException:“试图除以零。”

代码语言:javascript
运行
复制
var trade = new Trade
{
    Pair = pair,
    OpenRate = buyCandle.Close,
    OpenDate = buyCandle.OpenTime,
    Amount = 12345,
    OpenFee = _backtestOptions.OpenFee,
    CloseFee = _backtestOptions.CloseFee,
    IsOpen = true
};

我知道我可以在初始化之后手动调用该方法,如下所示:

代码语言:javascript
运行
复制
var trade = new Trade
{
    Pair = pair
};
CalcTradePrice();

或者创建一个执行它的派生类,但我不想这样做。有什么建议吗?

贸易级别:

代码语言:javascript
运行
复制
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
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-21 14:18:19

您可以创建参数化构造函数。通过传递给constructor.Use的参数分配所有属性,这些属性以CalcTradePrice()函数计算交易价格。

代码语言:javascript
运行
复制
public class Trade
{
    ...
    
    //I just passed two properties as an example, you can pass all required properties.
    public Trade(int currentBalance, int candleCloseValue)
    {
        this.CurrentBalance = currentBalance;
        this.CandleCloseValue= candleCloseValue;
        CalcTradePrice();
    }
    
    public void CalcTradePrice()
    {
        this.OpenTradePrice = this.CurrentBalance/this.CandleCloseValue; 
    }
}

在创建Trade类对象时,将值作为参数传递,

代码语言:javascript
运行
复制
var currentBalance = 100;
var candleCloseValue = 20;  
Trade trade = new Trade(currentBalance , candleCloseValue);

注意:我使用上述两个属性只是为了展示如何在调用CalcTradePrice()函数之前分配属性值。

票数 1
EN

Stack Overflow用户

发布于 2021-01-21 14:23:20

那这个呢?

代码语言:javascript
运行
复制
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(buyCandle,_backtestOptions, ..and so on )
    {

    Pair = pair,
    OpenRate = buyCandle.Close;
    OpenDate = buyCandle.OpenTime;
    Amount = currentBalance / buyCandle.Close;
    OpenFee = _backtestOptions.OpenFee;
    CloseFee = _backtestOptions.CloseFee;
    IsOpen = true;

     CalcTradePrice();

     }
};
票数 0
EN

Stack Overflow用户

发布于 2021-01-21 14:26:26

您的异常System.DivideByZeroException: 'Attempted to divide by zero.'可能由

金额= currentBalance / buyCandle.Close

而不是构造函数调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65829264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档