2012-02-23 18 views
17

chciałbym posiadać:Jak oznaczyć jako przestarzałe pojedynczą wartość enum w Delphi

TEnumType = (
    etValue1 = 1, 
    etValue2 = 2 deprecated, 
    etValue3 = 3); 

Zwraca:

[DCC Error] unt_CollectionImportType.pas(19): E2029 ',' or ')' expected 
but identifier 'deprecated' found. 

Czy istnieje sposób, aby poinstruować kompilator, że wartość ta jest przestarzałe.

+1

Nie sądzę, że to możliwe, jednym ze sposobów byłoby użyć {$ MESSAGE warn „TEnumType.etValue2 jest przestarzała”} niech użytkownicy wiedzą, że to przestarzała ... – ComputerSaysNo

+1

Odpowiedź jest prosta: nie –

+4

@dorin To nie jest dobre. To tworzy ostrzeżenie za każdym razem, gdy kompilujesz, a nie kiedy używasz symbolu. –

Odpowiedz

33
type 
    TEnumType = (
    etValue1 = 1, 
    etDeprecated2 = 2, // was: etValue2; Renamed so we can deprecate it by name 
    etValue3 = 3); 

const 
    etValue2 = etDeprecated2 deprecated; // Declares a constant mapped to the renamed enum value. 
+0

Czy to nie jest po prostu przestarzałe etValue2, a nie etDeprecated2? –

+0

@Rudy: Jasne, ale założenie jest takie, że etValue2 był deklarowany w enumie i został refaktoryzowany na powyższe. – afrazier

+7

@Rudy - tak, ale taki był cel. Zastąp rzeczywistą wartość wyliczenia nazwą, która nie będzie używana, a następnie zadeklaruj istniejącą (przestarzałą) wartość wyliczenia jako "alias" dla nowej nazwy i oznaczyć * alias * jako wycofany. Istniejący kod używa starej nazwy (aliasu), a zatem użycie nieaktualnej nazwy wartości jest zgłaszane przez ostrzeżenie przez kompilator. Ta odpowiedź rozwiązuje problem doskonale i całkiem sprytnie też imho. – Deltics

Powiązane problemy