1

请帮忙,我很困惑,我不知道为什么错误日志 System.StackOverflowException未处理。

我在设置 LekID 时不断收到错误消息。我该如何解决?

这是代码:

public Lager(long lekID, string lek, string proizvojdac, int kolicina, double cena)
{
    LekID = lekID;
    Lek = lek;
    Proizvodjac = proizvojdac;
    Kolicina = kolicina;
    Cena = cena;

}

public long LekID   
{
    get { return LekID; }
    set { LekID = value; }
}
public string Lek
{
    get { return Lek; }
    set { Lek = value; }
}
public string Proizvodjac
{
    get { return Proizvodjac; }
    set { Proizvodjac = value; }
}
public int Kolicina
{
    get { return Kolicina; }
    set { Kolicina = value; }
}
public double Cena
{
    get { return Cena; }
    set { Cena = value; }
}
4

6 回答 6

8

您应该为私有变量和属性赋予不同的名称。否则,当您访问它时,您的属性会调用它自己。

例子:

long _lekID;
public long LekID
{
    get { return _lekID; }
    set { _lekID = value; }
}

或者简单地说:

public long LekID { get; set; }
于 2013-03-05T10:21:19.730 回答
8
public long LekID   
{
    get { return LekID; }
    set { LekID = value; }
}

这(和其他属性)会导致 StackOverflowException,因为您一遍又一遍地分配value给。LekID

您应该向属性添加一个字段并将值存储在那里:

private long _lekID;
public long LekID   
{
    get { return _lekID; }
    set { _lekID = value; }
}
于 2013-03-05T10:22:22.517 回答
3

属性正在调用自己。尝试像这样更改您的属性:

public string Lek
{
    get;
    set;
}
于 2013-03-05T10:21:04.267 回答
2

您在 setter 和 getter 中递归调用 Lek 属性

要么引入一个支持字段:

private string lek;

public string Lek
{
    get { return this.lek; }
    set { this.lek = value; }
}

或使用自动属性:

public string Lek
{
    get; set;
}
于 2013-03-05T10:20:49.733 回答
0

将此社区 wiki 标记为仅是旁白,但如果您足够懒惰,这一切都不会发生(这通常是编程的优点,而不是缺点):

public long LekID {get;set;}
public string Lek {get;set;}
public string Proizvodjac {get;set;}
public int Kolicina {get;set;}
public double Cena {get;set;}

少打字;没有错误;并且您已正确地将 API 公开为属性,因此您可以稍后根据需要添加验证/副作用,并且它将与绑定 API(通常不喜欢字段)一起使用。

于 2013-03-05T10:30:33.660 回答
0

尝试使用像 prop/propfull 这样的代码片段,

片段将自动创建属性代码

于 2013-03-05T10:39:42.240 回答