System.StackOverflowException未处理

时间:2013-03-05 10:19:24

标签: c#

请帮助,我很困惑,我不知道为什么错误记录 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; }
}

6 个答案:

答案 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,

片段将自动创建属性代码