C#:Arrray von Objekten

Hallo allerseits,

folgendes Problem: Ich will in C# ein array von einem Objekt card erstellen und danach initialisieren und ausgeben.

card[] Karte = new card[CARD_COUNT];
Karte[0].init(1,1,1);
label_Status.Text = "Color: " + Karte[0].ifcolor() + " Value: " + Karte[0].ifvalue() + „.“;

(ifvalue und ifcolor geben nur die Werte (jeweils 1) die ich davor mit init() in die Variablen des Objekts geschrieben hab.)

Ich bekomme folgende Fehlermeldung: „NullReferenceException nicht behandelt.“ Soweit ich das verstanden hab, ist das Problem, dass ich nicht auf eine Objektinstanz verweise. Hab ich aber doch gemacht mit new?

Mit der Bitte um Aufklärung und Dank im Voraus,

Merlin

folgendes Problem: Ich will in C# ein array von einem Objekt
card erstellen und danach initialisieren und ausgeben.

card[] Karte = new card[CARD_COUNT];

Dieser Aufruf legt nur das Arrayobjekt an, nicht die Objekte, die die Arrayeinträge bilden. Es fehlt card[0] = new card() etc.

Ein Beispiel (sei A eine Klasse):

A a;
A[] array;

-> a ist null, array ist null

array = new A[2]
-> array zeigt auf ein Array-Objekt mit dem Inhalt [null, null]

a = new A();
-> a zeigt auf ein A-Objekt

array[0] = a
-> array hat den Inhalt [a (eine Referenz auf ein A-Ojekt), null]

Grüße,
Sebastian

Vielen Dank für die schnelle Antwort.

Nun tauchen weitere Fragen auf:

1.)
array[0] = new A();

geht das?

2.)Warum kommt bei meinem neuen Code

card[] Karten = new card[CARD_COUNT];
for (int a = 0; a

myArray[0] = new A(); geht das?

-> Ja!

Arrays werden indiziert, das heißt von 0 bis Anzahl-Elemente minus eins!
Also sowas:

string[] array = new string[5]; // Array mit 5 Elementen
array[0] = "Hallo!"; // Erstes Element
array[1] = "Hallo!";
array[2] = "Hallo!";
array[3] = "Hallo!";
array[4] = "Hallo!"; // Füntes Element
array[5] = "Hallo!"; // Sechstes Element HALT!!! Es gibt kein sechstes Element
 // -\> IndexOutOfRangeException

Ich würde dir raten, mal ein Buch mit den Grundlagen zu lesen.
http://openbook.galileocomputing.de/visual_csharp/

Grüße, JasonDelife.

Hi,

Ok. So einfach ist das manchmal… Hab lange nicht mehr programmiert, aber im Prinzip weiß ich das :smile:

Vielen Dank für dein „Auf-die-Sprünge helfen“.

MfG

Merlin

Coding Conventions
Im Bezug auf die Klasse card:

  • Klassen werden i.d.R. groß geschrieben (also „Card“) (vllt. ist es ja nur ein Tippfehler im Forum, dann will ich nichts gesagt haben)

  • Die Methoden ifcolor() und ifvalue() solltest du mit Properties lösen

    public int Value {
    get {
    return myPrivateIntVariableForStoringTheValue;
    }
    }
    // Color entsprechend, vllt. für Color statt int
    // das System.Drawing.Color-Struct verwenden
    // je nach dem, was du machen willst
    // (für Zeichnen und so wäre das geschickt)

Schau mal hier: http://www.guidetocsharp.de/Old/home/index.html?http…

Grüße, JasonDelife.