2013-04-24 96 views
5

我有一個類叫做播放卡,它從卡片類繼承。我將它實例化爲一個叫做chuckcards的對象。其中一個數據成員是CARD ID。我試圖給這個值賦一個int。它是在類中聲明的。 以下是它的實例化。給類對象一個值c#

playingcards[] chuckcards = new playingcards[10];

這裏是我嘗試分配值。

for (int ctr = 1; ctr < 10; ctr++) 
     { 

      chuckcards[ctr].cardID = ctr; 

      temp++; 
     } 

我得到的錯誤是不設置到對象的實例

對象引用。

我不知道我在做什麼錯?我可以創建一個將值分配給每個成員的方法嗎?如果這樣會對某些事情感到痛苦,但我可以做到這一點?或者他們是一個簡單的方法?

回答

7

當你調用new playingcards[10],它僅創建其中有一個類型,它是null引用類型的默認佔位符。您將有實際的新達playingcards來然後用它

for (int ctr = 1; ctr < 10; ctr++) 
    { 
     chuckcards[ctr] = new playcards{cardID=ctr}; 
     temp++; 
    } 

我所使用的對象初始化器到一行還簡化代碼。

這裏是發生了什麼:

var chuckcards = new playingcards[10]; 

結果如下:

chuckcards[0] = null 
... 
chuckcards[9] = null 

所以,你不能做

chuckcards[0].cardID 

,因爲它實在是

null.cardID 

所以,一旦你初始化值會從此有一個參考的:

chuckcards[0] = new playingcards(); 
chuckcards[0].cardID = ctr; 

評估爲

[ref to playingcards].cardID 

有效期

+0

謝謝。所以我創建了個人實例?那麼我需要一次新的嗎?或者說我去做'chuckcards [0] .cardName =「查克」;'我會再次提供嗎?任何鏈接的語法幫助也將是偉大的:) – Yop 2013-04-24 13:21:08

+0

不,只在初始化。我在我的答案中加入了更好的解釋 – 2013-04-24 13:21:33

+0

好的,希望目前的答案能夠爲你解釋得很好 – 2013-04-24 13:25:57

4

你需要給chuckcards[ctr]一個對象實例:

chuckcards[ctr] = new playingcards(); 
chuckcards[ctr].cardID = ctr; 
5

您已經定義了10個槽陣列以保存播放卡的實例,但每個插槽仍爲空
在進入循環之前,您需要在每個插槽中添加一個實例

chuckcards[0] = new playingcards(); 

等......(1,2,...9 =最高指數)

最終你可以在循環中檢查是否已指定一個實例給特定插槽或不

for (int ctr = 0; ctr < 10; ctr++) 
{ 
    if(chuckcards[i] != null) 
    { 
     chuckcards[ctr].cardID = ctr; 
     temp++; 
    } 
} 

請記住,在零數組索引開始不是一個

+0

我意識到張貼後謝謝你:) – Yop 2013-04-24 13:22:45

3

chuckcards [點擊率]爲空,你必須初始化它

playingcards[] chuckcards = new playingcards[10]; 

for (int ctr = 0; ctr < 10; ctr++) 
{ 
    chuckcards[ctr] = new playingcards(); 
    chuckcards[ctr].cardID = ctr; 
} 
2

的chuckcards [點擊率]爲空。你需要實例化它。

for (int ctr = 1; ctr < 10; ctr++) 
{ 
    chuckcards[ctr] = new playingcards(); 
    chuckcards[ctr].cardID = ctr; 
    temp++; 
} 

要得到更少的代碼,您可以創建另一個需要id的構造函數。那麼你有:

for (int ctr = 1; ctr < 10; ctr++) 
{ 
    chuckcards[ctr] = new playingcards(ctr); 
    temp++; 
}