2012-03-31 26 views
19

Tôi đang cố gắng tạo một mảng 2D để lưu trữ một số giá trị không thay đổi như thế này.Trường const của loại tham chiếu không phải chuỗi chỉ có thể được khởi tạo bằng lỗi rỗng

const int[,] hiveIndices = new int[,] { 
{200,362},{250,370},{213,410} , 
{400,330} , {380,282} , {437, 295} , 
{325, 405} , {379,413} ,{343,453} , 
{450,382},{510,395},{468,430} , 
{585,330} , {645,340} , {603,375} 
}; 

Nhưng trong khi biên soạn tôi nhận được lỗi này

hiveIndices is of type 'int[*,*]'. 
A const field of a reference type other than string can only be initialized with null. 

Nếu tôi thay đổi const to static, nó biên dịch. Tôi không hiểu làm thế nào để thêm các định lượng const nên gây ra hành vi này.

Trả lời

43

Trên thực tế bạn đang cố gắng để làm cho mảng - đó là một loại tài liệu tham khảo - const - điều này sẽ không ảnh hưởng mutability các giá trị của nó ở tất cả (bạn vẫn có thể đột biến bất kỳ giá trị trong mảng) - làm cho mảng readonly sẽ làm cho nó biên dịch, nhưng không có hiệu ứng mong muốn. Các biểu thức liên tục phải được đánh giá đầy đủ tại thời gian biên dịch, do đó toán tử mới không được phép.

Bạn có thể tìm kiếm ReadOnlyCollection<T>

Để biết thêm thấy tương ứng Compiler Error CS0134:

Một hằng thể hiện là một biểu hiện có thể được đánh giá đầy đủ tại thời gian biên dịch. Bởi vì cách duy nhất để tạo giá trị không null của loại tham chiếu là áp dụng toán tử mới và vì toán tử mới không được phép trong biểu thức liên tục, giá trị có thể duy nhất cho các hằng số của loại tham chiếu khác với chuỗi là null.

+1

Giải thích tuyệt vời, cảm ơn. – ABH

+0

Trên thực tế việc tạo ra một mảng 2d chỉ đọc sẽ yêu cầu viết một wrapper cho nó bởi vì 'AsReadOnly ' chỉ hỗ trợ mảng một chiều, không dựa trên: để đọc thêm, hãy xem http://stackoverflow.com/questions/5079970/storing-2- chiều-ints-as-readonly-const-in-riêng-class-trong khi-giữ-không – BrokenGlass

+0

bạn có nghĩa là tôi đã downvoted coz câu trả lời của tôi không phải là tốt nhất? – ABH

Các vấn đề liên quan