2010-03-24 43 views
1

我有一個像下面結構,當我做初始化:列表<element>初始化火災「進程被終止由於StackOverflowException」

ArrayList nodesMatrix = null; 
List<vertex> vertexMatrix = null; 
List<bool> odwiedzone = null; 
List<element> priorityQueue = null; 

vertexMatrix = new List<vertex>(nodesNr + 1); 
nodesMatrix = new ArrayList(nodesNr + 1); 
odwiedzone = new List<bool>(nodesNr + 1); 
priorityQueue = new List<element>(); 

arr.NodesMatrix = nodesMatrix; 
arr.VertexMatrix = vertexMatrix; 
arr.Odwiedzone = odwiedzone; 
arr.PriorityQueue = priorityQueue; //only here i have exception 

debuger火災過程被終止由於StackOverflowException:/ 一些想法,爲什麼這個集合觸發了這個異常?

private struct arrays 
    { 
     ArrayList nodesMatrix; 

     public ArrayList NodesMatrix 
     { 
      get { return nodesMatrix; } 
      set { nodesMatrix = value; } 
     } 
     List<vertex> vertexMatrix; 

     public List<vertex> VertexMatrix 
     { 
      get { return vertexMatrix; } 
      set { vertexMatrix = value; } 
     } 
     List<bool> odwiedzone; 

     public List<bool> Odwiedzone 
     { 
      get { return odwiedzone; } 
      set { odwiedzone = value; } 
     } 
     public List<element> PriorityQueue 
     { 
      get { return PriorityQueue; } 
      set { PriorityQueue = value; } 
     } 


    } 
    public struct element : IComparable 
    { 
     public double priority 
     { 
      get { return priority; } 
      set { priority = value; } 
     } 
     public int node 
     { 
      get { return node; } 
      set { node = value; } 
     } 
     public element(double _prio, int _node) 
     { 
      priority = _prio; 
      node = _node; 
     } 

     #region IComparable Members 

     public int CompareTo(object obj) 
     { 
      element elem = (element)obj; 
      return priority.CompareTo(elem.priority); 
     } 

     #endregion 
+2

如果我有一塊錢,每次我們看到這個問題時我會是一個富有的人...! – Sean 2010-03-24 20:48:17

回答

9

您的PriorityQueue屬性引用自身。
您需要更改訪問器以使用字段。

List<element> priorityQueue; 
public List<element> PriorityQueue 
{ 
    get { return priorityQueue; } 
    set { priorityQueue = value; } 
} 

但是,你應該使用自動實現的屬性,而不是:

public List<element> PriorityQueue { get; set; } 
+0

讓類字段名稱以下劃線開頭的一個很好的理由。 – 2010-03-24 20:46:03

+0

'element'結構的'note'和'priority'屬性也是如此。 – 2010-03-24 21:04:57

+0

Fredrik你是對的,我也有這個錯誤的注意和優先級:/所有這一切都是因爲我不使用VS自動執行的屬性,但嘗試自己寫!但現在我會記住這一點!謝謝! – netmajor 2010-03-24 21:27:09

3

您的屬性setter是遞歸的。

public List<element> PriorityQueue 
    { 
     get { return PriorityQueue; } 
     set { PriorityQueue = value; } 
    } 

變化這是:

public List<element> PriorityQueue 
    { 
     get { return priorityQueue; } 
     set { priorityQueue = value; } 
    } 
+0

他也沒有領域。 – SLaks 2010-03-24 20:47:46

+0

我注意到,他發現一旦編譯失敗,他會注意到。 – user7116 2010-03-24 21:17:27

相關問題