2015-06-03 16 views
5

Với enum sau:Có thể tuyên bố giá trị mục mảng const riêng

type TEnum = (teA, teB, teC); 

Tôi muốn khai báo một mảng const của TEnum, tuy nhiên tôi thấy như sau mối liên hệ giữa các mục mảng và enum mặt hàng là tương đối khó đọc và duy trì (rõ ràng tôi biết rằng tôi có thể bình luận một cách chi tiết và cung cấp cho mỗi mục hàng riêng của mình):

const AN_ARRAY : array[TEnum] of Integer = (1, 12, 146); 

có cách nào để khai báo một mảng const hơn như thế này?

const 
    AN_ARRAY : array[TEnum] of Integer : 
    AN_ARRAY[teA] = 1, 
    AN_ARRAY[teB] = 12, 
    AN_ARRAY[teC] = 146 
    ; 

Lý tưởng nhất Tôi muốn thiết lập các giá trị enum ord và không sử dụng mảng ở tất cả, nhưng điều này có nghĩa là tôi rồi can't useTypeInfo để thao tác các enum.

+0

gì về '{AN_ARRAY [trà] =} 1, '? :) Tôi không nghĩ rằng bạn có thể khai báo một mảng liên tục theo cách khác so với một danh sách có thứ tự các giá trị. – TLama

+0

Câu trả lời đơn giản: không –

Trả lời

5

Không. Các chỉ số của hằng số mảng luôn ẩn. Đưa chúng vào các bình luận nếu bạn cần xem chúng bên cạnh các giá trị tương ứng của chúng, nhưng hãy cẩn thận rằng các chú thích có thể không đồng bộ với mã thực, và trình biên dịch sẽ không cảnh báo bạn về điều đó.

const 
    AN_ARRAY : array[TEnum] of Integer = (
    1, // teA 
    12, // teB 
    146 // teC 
); 
+0

Đó là những gì tôi hiện có và những gì tôi lo lắng. –

+0

Rob không cung cấp giải pháp cho vấn đề. Ông đang trả lời câu hỏi của bạn trong tiêu cực. Không có giải pháp. –

1

Đây là cách tiếp cận khác:

type 
    TEnum = (teA, teB, teC); 

const 
    teAVal = 1; 
    teBVal = 12; 
    teCVal = 146; 

const 
    AN_ARRAY : array[TEnum] of Integer = (teAVal, teBVal, teCVal); 
+0

Thật không may là không có gì đảm bảo trật tự, phải không? –

+2

Chính xác. Điều này giới thiệu sự phức tạp trong khi vẫn giữ nguyên vấn đề ban đầu. -1 –

+1

Không, Jamie, thực sự không đảm bảo trật tự. Trong ví dụ cụ thể này, thật dễ dàng để nhận ra các mục nhập không đúng thứ tự vì tên của các giá trị enum có một thứ tự rõ ràng (A, B, C). Mặt khác, thật khó để nhận ra một danh sách các mục nhập có thứ tự xấu tương ứng với các giá trị trong ['TRuntimeError'] (http://docwiki.embarcadero.com/Libraries/en/System.TRuntimeError), ví dụ. –

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