Jeszcze jeden nawias klamrowy ustawić {}
jest wymagane w początkowej deklaracji:
var waypoints = new int[4][,] {
new int[,] {{6}, {0}},
new int[,] {{1}, {1}},
new int[,] {{1}, {5}},
new int[,] {{6}, {5}}
};
Dzieje się tak dlatego, że dla takich tablic 2D każdy element w tablicy jest uważany za tablicę do inicjalizacji (choć zwykle jest używany na element tablicy, taki jak val[0,0] = 4;
).
Edit (po informacji zwrotnej od komentarzach):
Put w przeciwieństwie int[][]
(znany jako jagged array
, czyli: tablica tablic, których członkiem Tablica może być different size) int[,]
jest 2D tablica z fixed dimension . Obie są tablicą, która przechowuje tablice, a zatem każdy element tablicy jest tablicą. To wyjaśnia, dlaczego istnieje potrzeba umieszczenia kolejnego nawiasu klamrowego w inicjalizacji, jak wyżej.
Takie 2d tablicy, gdy inicjowane inaczej spowoduje inny wymiar (a więc istnieje wiele sposobów, aby to zainicjować)
int[,] val = new int[,] { { 6 }, { 0 } }; //resulting in int[2,1]
int[,] val = new int[,] { { 6, 0 } }; //resulting in int[1,2]
W obu, dodatkowy zestaw nawiasu potrzebne.
różnic między jagged array
i wielowymiarowej, ustalonej wielkości, tablicy, there są alreadyplentygoodexplanations/benchmarkingavailableonline ze źródeł dobrze renomowanych. Rozumiem, że poza zainteresowaniem PO nie byłoby istotne, bym dodał więcej informacji na ten temat. (I w związku z tym zakres tej odpowiedzi jest pierwotnie skierowany tylko w celu odpowiedzi na nieudaną inicjalizację).
Rozumie się, że rozwiązanie nie jest najlepiej wykorzystywane do przechowywania punktów współrzędnych (jak to robi OP). Powyższe wyjaśnienie podaje wyjaśnienie, dlaczego jego inicjalizacja nie działa, zamiast zapewniać najlepsze rozwiązanie do przechowywania punktów współrzędnych. Jeśli chodzi o przechowywanie punktów współrzędnych, Point w System.Drawing
struct
będzie bardziej odpowiedni (jak sugerowano w komentarzu).
Użycie tablicy 2D do reprezentowania pojedynczego punktu w 2D Cartesian coordinate jest "przeskokiem", ponieważ tablica 1D jest już w stanie przechowywać tyle cyfr, ile pozwala na to komputer, o wiele więcej niż dwie liczby wymagane do przechowywania punktów w kartezjańskim system współrzędnych.
Możliwa duplikatów [Pominięcie C# nowego z inicjowania poszarpanych macierzy] (http://stackoverflow.com/questions/14492279/omitting-c-sharp-new-z-jagged-array-initialization) – ardila
Dlaczego nie utworzyć listy struktur 'Vector2' czy coś takiego? W dłuższej perspektywie może być łatwiej pracować i łatwiej. – rhughes
@rhughes: Nie wspominając już o lepszej lokalizacji odniesienia (ważna uwaga dla pamięci podręcznych L-n w obecnych procesorach) i zmniejszonej zbieraniu śmieci (ponieważ * tablice * są obiektem, a struktury nie są). –