2013-04-24 24 views
5

Ich habe eine Klasse namens Spielkarten erbt von einer Klasse Karten. Ich habe es als Objekt namens Chuckcards instanziiert. Eines der Datenelemente ist die CARD ID. Ich versuche, dem Wert einen int zuzuweisen. es wird in der Klasse als public deklariert. Hier ist, wie es instanziiert.Geben Sie einem Klassenobjekt einen Wert C#

playingcards[] chuckcards = new playingcards[10];

Hier ist, wie ich versuche, Werte zuweisen.

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

      chuckcards[ctr].cardID = ctr; 

      temp++; 
     } 

Der Fehler, den ich bekommen ist

Objektverweis nicht auf eine Instanz eines Objekts festgelegt.

Ich weiß nicht, was ich falsch mache? Könnte ich eine Methode erstellen, die jedem Mitglied den Wert zuweist? Wenn das so ist, wird es für bestimmte Dinge ein Schmerz sein, aber ich könnte es tun? oder ist das ein einfacher Weg?

Antwort

7

Wenn Sie new playingcards[10] nennen, schafft es nur Platzhalter, die die Standard dieses Typs haben, die null für Referenztypen ist. Sie müssen tatsächlich neue Spielkarten bis dann

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

I initializer ein Objekt verwendet, verwenden auch den Code bis auf eine Linie zu vereinfachen. Hier

ist, was passiert:

var chuckcards = new playingcards[10]; 

Ergebnisse in der folgenden:

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

Also, Sie nicht

chuckcards[0].cardID 

tun können, weil es wirklich ist

null.cardID 
So

, sobald Sie den Wert initialisieren wird es einen Verweis aus dann auf:

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

zu

wertet
[ref to playingcards].cardID 

, die gültig ist

+0

Vielen Dank. Also erstelle ich die einzelnen Instanzen? Würde ich es dann einmal neu machen müssen? Oder ich sagte, ich wollte 'chuckcards [0] .cardName =" Chuck ";" Würde ich das nochmal machen? Alle Links für Hilfe mit Syntax wäre auch toll :) – Yop

+0

nein, nur bei der Initialisierung. Ich füge zu meiner Antwort hinzu, um besser zu erklären –

+0

OK, hoffentlich erklärt die gegenwärtige Antwort es gut genug für Sie –

4

Sie benötigen chuckcards[ctr] eine Objektinstanz geben:

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

Sie definiert haben, eine Reihe von 10 Slots um Instanzen von Spielkarten zu halten, aber jeder Slot ist immer noch Null
Bevor Sie die Schleife betreten müssen Sie eine Instanz in jedem Slot mit

hinzufügen
chuckcards[0] = new playingcards(); 

und so weiter ..... (1,2, ...9 = max Index)

schließlich könnten Sie innerhalb der Schleife überprüfen, ob Sie eine Instanz zu einem bestimmten Schlitz zugeordnet hat oder nicht

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

Und denken Sie daran, Array-Index Start bei Null nicht an einem

+0

I erkannte, dass nach dem Posting danke :) – Yop

3

chuckcards [ctr] ist null, du musst es instanziieren

playingcards[] chuckcards = new playingcards[10]; 

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

Die chuckcards [ctr] ist null. Sie müssen es installieren.

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

Um weniger Code zu haben, können Sie einen anderen Konstruktor erstellen, der eine ID benötigt. Dann haben Sie:

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