我在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";
发生堆栈溢出:)你能帮我解决这个问题吗?
答案 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; }
}