hơn Một khung xoăn thiết {}
là yêu cầu trong khai báo ban đầu:
var waypoints = new int[4][,] {
new int[,] {{6}, {0}},
new int[,] {{1}, {1}},
new int[,] {{1}, {5}},
new int[,] {{6}, {5}}
};
Điều này là do đối với mảng 2D, mỗi phần tử trong mảng được coi là một mảng cho khởi tạo (mặc dù nó thường được sử dụng cho mỗi phần tử của mảng chẳng hạn như val[0,0] = 4;
).
Chỉnh sửa (sau khi thông tin phản hồi từ bình luận):
Đặt trái ngược với int[][]
(được gọi là jagged array
, đó là: mảng của mảng có thành viên mảng có thể được different size), int[,]
là một mảng 2D với fixed dimension . Cả hai đều là mảng lưu trữ các mảng, và do đó mỗi phần tử của mảng là một mảng. Điều này giải thích tại sao cần phải đặt một dấu ngoặc nhọn khác trong quá trình khởi tạo như trên.
mảng 2D như vậy, khi khởi tạo khác nhau, sẽ dẫn đến chiều hướng khác nhau (và do đó có rất nhiều cách để khởi tạo nó):
int[,] val = new int[,] { { 6 }, { 0 } }; //resulting in int[2,1]
int[,] val = new int[,] { { 6, 0 } }; //resulting in int[1,2]
Trong cả hai cách, bộ thêm khung xoăn cần.
Đối với sự khác nhau giữa jagged array
và đa chiều, cố định kích thước, mảng, there là alreadyplentygoodexplanations/benchmarkingavailableonline từ các nguồn có uy tín. Và tôi hiểu rằng nó sẽ không đáng kể, ngoài sự quan tâm của OP, để tôi có thể đưa thêm thông tin về nó. (Và do đó phạm vi cho câu trả lời này ban đầu chỉ được hướng dẫn để trả lời khởi tạo thất bại).
Điều này được hiểu rằng giải pháp không được sử dụng tốt nhất để lưu trữ các điểm tọa độ (như được thực hiện bởi OP). Giải thích ở trên được đưa ra để giải thích lý do tại sao khởi tạo của ông không hoạt động, thay vì cung cấp giải pháp tốt nhất để lưu trữ các điểm tọa độ. Để lưu trữ điểm tọa độ, Point trong System.Drawing
struct
sẽ phù hợp hơn (như được đề xuất trong nhận xét).
Việc sử dụng mảng 2D để biểu thị một điểm trong 2D Cartesian coordinate là "quá mức", vì mảng 1D đã có khả năng lưu trữ nhiều số như máy tính cho phép, nhiều hơn hai số cần thiết để lưu trữ điểm trong Descartes hệ tọa độ.
có thể trùng lặp của [Bỏ qua C# mới từ khởi tạo mảng răng cưa] (http://stackoverflow.com/questions/14492279/omitting-c-sharp-new-from-jagged-array-initialization) – ardila
Tại sao không tạo danh sách các cấu trúc 'Vector2' hay đại loại thế? Nó có thể được dễ dàng hơn để làm việc với và đơn giản trong thời gian dài. – rhughes
@rhughes: Chưa kể đến địa điểm tham chiếu tốt hơn (xem xét quan trọng đối với bộ nhớ L-n trong bộ xử lý hiện tại) và thu gom rác giảm (vì * mảng * là một đối tượng và cấu trúc không). –