Wieso funktioniert dieser Code in C# nicht?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Mit einer for-Schleife gelangst du leicht an dein Ziel.

for (int row = 0; row < gameBoard.GetLength(0); ++row)
{
  for (int column = 0; column < gameBoard.GetLength(1); ++column)
  {
    Console.Write(gameBoard[row, column]);
  }

  Console.WriteLine();
}

Beachte, dass die Ausgabe in der inneren Schleife mit Write durchgeführt werden sollte, statt mit WriteLine. Andernfalls bekommst du Zeilenumbrüche im Ergebnis, wo du sie ganz sicher nicht haben möchtest.

Wie die foreach-Schleife hingegen agiert, erklärt die Microsoft Dokumentation.

Bei mehrdimensionalen Arrays werden Elemente so durchlaufen, dass die Indizes der äußersten rechten Dimension zuerst erhöht werden, dann die der links daneben liegenden Dimension und so weiter, bis die linke Seite erreicht ist (...)
Bei mehrdimensionalen Arrays haben Sie jedoch eine größere Kontrolle über die Reihenfolge bei der Verarbeitung von Arrayelementen, wenn Sie eine geschachtelte  for-Schleife verwenden.

Quelle

Wenn du über ein multidimensionales Array foreach'st, wird jeder Eintrag einzeln durchgegangen, als wäre es ein einziges langes eindimensionales Array. Die einzelnen Einträge sind aber eben chars und keine char-Arrays (schon gar keine 2-dimensionalen char-Arrays).

Wenn du auf die Reihe zugreifen willst, kannst du z.B. stattdessen ein jagged array verwenden oder ein wenig Linq anwenden. Beachte, dass aber auch dann die Reihe nicht vom Typ char[,] sondern char[] ist.

also den typ kenne ich so auch nicht

 
char[*,*]

wenn du eine reihe haben willst wäre das wenn sowas wie

char[]
NFSMostWanted29 
Fragesteller
 31.10.2021, 09:16

Dann kommt da die gleiche Meldung, nur ohne das Komma... Danke trotzdem :)

0
TechPech1984  31.10.2021, 09:19
@NFSMostWanted29

https://stackoverflow.com/questions/2893297/iterate-multi-dimensional-array-with-nested-foreach-statement

C# has multidimensional and jagged arrays as seperate concepts, where 
int[,]
 is a 2 dimensional array, and 
int[][]
 is a jagged array of arrays and each given array is not required to have the same length. You can easily do a foreach on the jagged array, but a 2D array is not the same type of structure. At any rate, your second snippet doesn't fit  this problem, the first snippet isn't nested.
0
TechPech1984  31.10.2021, 09:22
@NFSMostWanted29

Two ways:

  1. Define the array as a jagged array, and use nested foreachs.
  2. Define the array normally, and use foreach on the entire thing.

Example of #2:

int[,] arr = { { 1, 2 }, { 3, 4 } };
foreach(int a in arr)
    Console.Write(a);

Output will be 1234. ie. exactly the same as doing i from 0 to n, and j from 0 to n.

0

Ich schätze mal du musst hier Quotes setzen

char[,] 
Woher ich das weiß:eigene Erfahrung