Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
C# Auf werte eines Benuterdefinerten Klassen-Arrays zugreifen
kampfsau
myCSharp.de - Member



Dabei seit:
Beiträge: 15

Themenstarter:

C# Auf werte eines Benuterdefinerten Klassen-Arrays zugreifen

beantworten | zitieren | melden

Hallo,

ich hänge jetzt schon 2h an dem problem und hoffe mir kann wer helfen! :)

Also: ich habe eine neue klasse names "Feld" erstellt. diese hat unter anderem einen wert "Mine" der bool und auch public ist. nun habe ich im "hauptprogramm" ein array:"Feld[,] Felder = new Feld[9,9]" angelegt. (eigentlich müsste es doch "new Feld()[9,9] heißen oder? geht aber nicht..(Indizierung mit [] kann nicht auf einen Ausdruck vom Typ "Minessweeper_Beta1.Feld" angewendet werden.)) so.. nun möchte ich mittels "Felder[0,0].Mine = true;" einem bestimmten Feld den Wert "Mine = true" zuordnen. Das Programm wird ohne Felder kompiliert jedoch erscheint dann die Fehlermeldung: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

so ich hoffe es ist verständlich und nun warte ich gespannt auf eure antworten..

lg
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von kampfsau am .
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 343
Herkunft: Österreich

beantworten | zitieren | melden

Hallo kampfsau (cooler Name),

Also deine 2 Fragen lassen sich in einem beantworten:
1.) es heißt nicht new Feld()[9,9] weil das den Anschein erwecken würde dass ein Konstruktor von Feld aufgerufen wird (was nicht der Fall ist)

2.) jetzt müsste auch klar sein warum du nicht auf Felder[0,0].Mine zugreifen kannst. Weil in deinem Feld noch gar keine Objekte sind. Du hast zwar ein Feld, aber überall steht null drinnen. Und null.Mine gibts natürlich nicht, deshalb die Fehlermeldung.

Du müsstest zuerst alle Felder einmal erstellen denn mit Felder = new Feld[9,9] reservierst du quasi nur einmal Speicherplatz:


for(int i = 0; i < 9; i++)
{
  for(int j = 0; j < 9; j++)
  {
    Felder[i,j] = new Feld();
  }
}

Kleiner Tipp anbei: in Zukunft musst du außerdem darauf achten keine Anfängerfragen zu stellen (deine obige Frage ist da meiner Meinung nach noch ein Grenzfall), manche im Forum sind da recht streng. Aber du hast Glück dass um diese Uhrzeit scheinbar niemand da ist

Liebe Grüße
Preli
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo kampfsau,
Zitat
1.) es heißt nicht new Feld()[9,9] weil das den Anschein erwecken würde dass ein Konstruktor von Feld aufgerufen wird (was nicht der Fall ist)
es geht nicht nur um den Anschein. Es würde damit tatsächlich ein (einzelnes) Objekt vom Typ Feld erzeugt werden und eben nicht ein Array, wie du das möchtest.

int i = new List<int> () [20]; wäre z.B. syntaktisch korrekt, wenn auch nicht sinnvoll. Es würde dadurch eine Liste erzeugt und dann gleich auf das einundzwanzigste Element zugegriffen (was nicht existiert, weshalb auch eine Exception geworfen wird). Syntaktisch geht das. Also () immer weglassen, wenn du Arrays des Typs statt einzelne Objekte des Typs erzeugen willst.

Beachte aber bitte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.
Zitat
nun möchte ich mittels "Felder[0,0].Mine = true;" einem bestimmten Feld den Wert "Mine = true" zuordnen. [...] jedoch erscheint dann die Fehlermeldung: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
Siehe [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt


Hallo preli,
Zitat
in Zukunft musst du außerdem darauf achten keine Anfängerfragen zu stellen
Anfängerfragen - im Sinne von Fragen von Anfängern - sind kein Problem. Die sind natürlich erlaubt. Problem sind die Fragen nach Grundlagen. Also Fragen, die man nicht stellen muss, wenn man ein C# Buch durchgearbeitet hat. Oder eben - wie in diesem Fall - in die FAQ geschaut hätte.

herbivore
private Nachricht | Beiträge des Benutzers