簡體   English   中英

System.StackOverflowException未處理

[英]System.StackOverflowException was unhandled

請幫助,我很困惑,我不知道為什么錯誤日志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; }
}

您應該給私有變量和屬性賦予不同的名稱。 否則,您的媒體資源會在您訪問時自行調用。

例:

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

或者簡單地:

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

這(和其他屬性)導致StackOverflowException,因為您要LekID遍地為LekID分配value

您應該在屬性中添加一個字段,並將值存儲在其中:

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

屬性正在自稱。 嘗試像這樣更改屬性:

public string Lek
{
    get;
    set;
}

您正在setter和getter中遞歸調用Lek屬性

要么引入一個支持領域:

private string lek;

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

或使用自動屬性:

public string Lek
{
    get; set;
}

將此社區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(通常不喜歡字段)一起使用。

嘗試使用prop / propfull之類的代碼段,

片段將自動創建屬性代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM