属性设置器上的堆栈溢出

时间:2014-09-02 19:26:27

标签: c# properties setter

我在C#中有一个具有当前属性的对象。

public DateTime startDate
{
    get 
    {
        string[] ymd = Environment.GetCommandLineArgs()[2].Split('.');
        return new DateTime(Int32.Parse(ymd[2]), Int32.Parse(ymd[1]), Int32.Parse(ymd[0])); 
    }
    set { startDate = value; }
}

但是当我尝试使用定义为此的函数时:

public String Calculate(){
    if (startDate > endDate)
        return "not calculable since the end date can not be before than the start date.";

    while (startDate <= endDate)
    {
        if (startDate.DayOfWeek.ToString()[0] != 'S')
            count++;
        startDate = startDate.AddDays(1);
    }

    return "not implemented yet";

发生堆栈溢出:)你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:7)

你的二传手有一个错误。您正在尝试分配给同一个属性,这是堆栈溢出的原因,因为对属性的每个赋值都只是调用它的setter。

set { startDate = value; }

答案 1 :(得分:1)

该属性在此处设置,导致无限循环:

set { startDate = value; }

您需要一个支持字段来保留属性的值,如果尚未设置则需要初始化它:

private DateTime? _startDate;

public DateTime startDate {
  get {
    if (!_startDate.HasValue) {
      string[] ymd = Environment.GetCommandLineArgs()[2].Split('.');
      _startDate = new DateTime(Int32.Parse(ymd[2]), Int32.Parse(ymd[1]), Int32.Parse(ymd[0]));
    }
    return _startDate.Value;
  }
  set { _startDate = value; }
}