2013-02-21 82 views
-2

每當我嘗試運行我的代碼時,出現錯誤:「進程因StackOverFlowException而終止」。當我看到這個警告時,我在自己的特性中得到它說「確保你沒有無限循環或無限遞歸」。這裏是我的代碼:在我的通用列表代碼中出現Stackoverflowexception錯誤,c#

class Book 
{ 
    public string bokensTittle 
    { 
     get { return bokensTittle; } 
     set { bokensTittle = value; } 
    } 
    public string forfattareFornamn 
    { 
     get {return forfattareFornamn;} 
     set {forfattareFornamn = value;} // on this line i get the error 
    } 

    public string forfattareEfternamn 
    { 
     get {return forfattareEfternamn;} 
     set {forfattareEfternamn = value;;} 
    } 

    public int lanseringsDatum 
    { 
     get { return lanseringsDatum; } 
     set { lanseringsDatum = value; } 
    } 

} 

有人能幫我解決這個問題嗎?

回答

3

你在這裏有一個簡單的,無限的遞歸。

您的兩個屬性都正在訪問自己。

有固定它的方式有兩種:

  1. 自動屬性:

    public string ForfattareEfternamn 
    { 
        get; set; 
    } 
    
    public int LanseringsDatum 
    { 
        get; set; 
    } 
    
  2. 支持字段:

    private string _forfattareEfternamn; 
    private int _lanseringsDatum; 
    
    public string ForfattareEfternamn 
    { 
        get { return _forfattareEfternamn; } 
        set { _forfattareEfternamn = value; } 
    } 
    
    public int LanseringsDatum 
    { 
        get { return _lanseringsDatum; } 
        set { _lanseringsDatum = value; } 
    } 
    

BTW:請注意,我怎麼改屬性的名稱es以大寫字母開頭。這是C#中公共成員公認的標準。

+0

完美,很多謝謝! – user2057693 2013-02-21 08:52:48

1

您正在從getter調用屬性,該屬性來自property屬性等。

public string forfattareEfternamn 
{ 
    get {return forfattareEfternamn;} <-- here you call property getter again 
    set {forfattareEfternamn = value;} 
} 

如果你想用回存儲,然後字段和屬性應該有不同的名稱(通常駝峯名字後面存儲和PascalCase名稱屬性):

private string forfattareEfternamn; // field for storing property value 

public string ForfattareEfternamn // property 
{ 
    get {return forfattareEfternamn;} // returning field value 
    set {forfattareEfternamn = value;} // setting field value 
} 

但在你情況下,你可以簡單地使用自動實現的屬性:

public string ForfattareEfternamn { get; set; } 

強烈 RECOM修補您的閱讀Properties (C# Programming Guide)

+0

如此例如,而不是這樣的:公共字符串forfattareFornamn { 得到{forfattareFornamn;} 集合{forfattareFornamn =值;} } – user2057693 2013-02-21 08:48:49

+0

我應該寫:公共字符串ForfattareFornamn { 得到{forfattareFornamn;} 集{forfattareFornamn = value;} } – user2057693 2013-02-21 08:49:14

+0

@ user2057693只需寫入'public string ForfattareEfternamn {get;組;因爲你的屬性中沒有任何邏輯 – 2013-02-21 08:49:32

2

您的屬性名稱與您在getter和setter中使用的名稱相匹配。只聲明get; set;聲明如果你不打算使用私有變量。

class Book 
{ 
    public string bokensTittle 
    { 
     get;set; 
    } 
    public string forfattareFornamn 
    { 
     get;set; 
    } 

    public string forfattareEfternamn 
    { 
     get;set; 
    } 

    public int lanseringsDatum 
    { 
     get;set; 
    } 
} 
1
public string forfattareEfternamn 
    { 
     get; 
     set; 
    } 

    public int lanseringsDatum 
    { 
     get; 
     set; 
    } 

我相信autoproperties是你正在嘗試做的。

1

試試這個:

public string forfattareEfternamn 
{ 
    get; 
    set; 
} 

public int lanseringsDatum 
{ 
    get; 
    set; 
} 
1

的兩個的GET語句引用自己。任何時候你試圖找回任何財產,它會一遍又一遍地調用自己的財產。這是無限循環和堆棧溢出的原因。

而是,您可以使用後備字段。

private string _forfattareEfternamn; 

private int _lanseringsDatum; 

public string ForfattareEfternamn 
{ 
    get {return forfattareEfternamn;} 
    set {forfattareEfternamn = value;;} 
} 

public int LanseringsDatum 
{ 
    get { return lanseringsDatum; } 
    set { lanseringsDatum = value; } 
} 

或者,如果您在屬性中不需要額外的代碼,空白的get/set將會適合您。

public string ForfattareEfternamn 
{ 
    get; 
    set; 
} 

public int LanseringsDatum 
{ 
    get; 
    set; 
} 

(也用你的引領者首先你有一個額外的;)

相關問題