2015-06-03 27 views
5

Biorąc pod uwagę następujące wyliczenia:Czy można zadeklarować const wartości elementu tablicy indywidualnie

type TEnum = (teA, teB, teC); 

Chciałbym zadeklarować const tablicę TEnum jednak znajdę z następujących połączenie między elementów tablicy i wyliczenia przedmiotów jest stosunkowo trudne do odczytania i utrzymania (oczywiście zdaję sobie sprawę, że mogę skomentować --long i dać każdemu artykuł własną linię):

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

Czy istnieje sposób, aby zadeklarować tablicę const więcej w ten sposób?

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

Idealnie ja je ustawić wartości wyliczenia ord, nie stosując układ w ogóle, a to oznacza, że ​​następnie can't useTypeInfo manipulować wyliczeniowego.

+0

co '{AN_ARRAY [TEA]} 1 =,'? :) Nie sądzę, że możesz zadeklarować stałą tablicę w inny sposób niż uporządkowana lista wartości. – TLama

+0

Prosta odpowiedź: nie –

Odpowiedz

5

Nie. Wskaźniki stałej tablicowej są zawsze niejawne. Dodaj je do komentarzy, jeśli chcesz zobaczyć je obok odpowiadających im wartości, ale pamiętaj, że komentarze mogą zostać zsynchronizowane z rzeczywistym kodem, a kompilator nie ostrzeże Cię o tym.

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

To właśnie mam obecnie i co mnie martwi. –

+0

Rob nie oferuje rozwiązania problemu. Odpowiada na twoje pytanie przecząco. Nie ma rozwiązania. –

1

To kolejne podejście:

type 
    TEnum = (teA, teB, teC); 

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

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

Niestety nie ma gwarancji na zamówienie, prawda? –

+2

Dokładnie. Wprowadza to złożoność przy zachowaniu pierwotnego problemu. -1 –

+1

Nie, Jamie, rzeczywiście nie ma gwarancji, że zamówienie. W tym konkretnym przykładzie łatwo jest rozpoznać nieuporządkowane wpisy, ponieważ nazwy wartości wyliczeniowych mają oczywistą kolejność (A, B, C). Z drugiej strony, trudno byłoby rozpoznać źle uporządkowaną listę wpisów odpowiadającą wartościom w ['TRuntimeError'] (http://docwiki.embarcadero.com/Libraries/en/System.TRuntimeError), na przykład. –

Powiązane problemy