2017-01-20 45 views
0

我創造我自己的類結構:Array from Array;系統空引用異常

namespace testproject 
{ 
    public class frameSructure 
    { 
     public string type = "n/a"; 
     public string reader = "n/a"; 
    } 
} 

當我使用它的形式作爲一個單一的建設,一切都很好,但是當我創建一個數組,當我嘗試使用它:

namespace testproject 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     public frameSructure[] frame = new frameSructure[10]; 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      frame[1].type = "n/a"; 
     } 
    } 
} 

我得到一個系統空引用異常。 {「對象引用未設置爲對象的實例。」}

frame[1].type = "n/a"; 

有人可以幫我理解爲什麼嗎? 謝謝

+1

當創建引用類型的陣列(如你的'frameStructure')的數組充滿空值;它沒有填充該類的默認構造實例。你將不得不循環填充實際的實例。 –

+0

這是因爲'new frameStruct'只在堆棧/堆上分配內存,但不創建* struct的任何實例。事先需要'frame [1] = new frameStruct()'。 – HimBromBeere

+0

另請參閱http://stackoverflow.com/questions/18849325/c-null-reference-exception –

回答

0

你初始化數組,而不是它裏面的值。 這意味着雖然數組有10個條目,但它們全都爲空。

更改表單負載這樣:

private void Form1_Load(object sender, EventArgs e) 
    { 
     frame[1] = new frameSructure(); 
     frame[1].type = "n/a"; 
    } 

順便說一句,在c#陣列從0開始,而不是1

+0

謝謝你的更正。我不明白爲什麼我需要一個一個地創建數組的所有元素,如果我已經聲明瞭由類組成的數組,但我知道如何使用它。謝謝。 – Rivendare

0

您需要先將一個項目添加到數組中。在你的代碼中,你只創建了一個幀結構類型的空數組。

您將項目添加到您的陣列,像這樣......

frame[1]= new frameSructure(); 
+0

感謝您的更正。我不明白爲什麼我需要一個一個地創建數組的所有元素,如果我已經聲明瞭由類組成的數組,但我知道如何使用它。謝謝。 – Rivendare

+0

您已創建數據結構(數組),但尚未放入任何數據。將數組看作公交車和其中的人員作爲數據。目前你有一輛空車。 –