请帮助,我很困惑,我不知道为什么错误记录
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; }
}
答案 0 :(得分:8)
您应该为私有变量和属性指定不同的名称。否则,您的财产在您访问时会自行调用。
示例:
long _lekID;
public long LekID
{
get { return _lekID; }
set { _lekID = value; }
}
或者简单地说:
public long LekID { get; set; }
答案 1 :(得分: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; }
}
答案 2 :(得分:3)
属性正在调用自己。尝试更改您的属性,如下所示:
public string Lek
{
get;
set;
}
答案 3 :(得分:2)
你在setter和getter中递归调用Lek属性
引入支持字段:
private string lek;
public string Lek
{
get { return this.lek; }
set { this.lek = value; }
}
或使用自动属性:
public string Lek
{
get; set;
}
答案 4 :(得分:0)
标记这个社区维基,因为它只是一个旁边,但如果你已经足够懒惰(这通常是编程的优点,而不是恶习),这一切都不会发生:
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(通常不喜欢字段)。
答案 5 :(得分:0)
尝试使用代码片段,例如prop / propfull,
片段将自动创建属性代码