2012-02-23 9 views
17

vorrei avere il seguente:Come contrassegnare come deprecato un singolo valore enum in Delphi

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

Restituisce:

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

Esiste un modo per indicare al compilatore che il valore è deprecato.

+1

Non credo che sia possibile, in un modo sarebbe quello di utilizzare {MESSAGE $ WARN 'TEnumType.etValue2 è deprecato'} per lasciare che gli utenti sanno che è deprecato ... – ComputerSaysNo

+1

La semplice risposta è no –

+4

@ Dorin Non va bene. Questo crea solo un avvertimento ogni volta che compili piuttosto che quando usi il simbolo. –

risposta

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

Questo non significa solo deprecare etValue2, e non etDeprecated2? –

+0

@Rudy: certo, ma il presupposto è che etValue2 fosse dichiarato nell'enumerazione e che sia stato rifattorizzato in precedenza. – afrazier

+7

@Rudy: sì, ma quello era l'obiettivo. Sostituire il valore enum effettivo con un nome che non verrà utilizzato, quindi dichiarare il valore enum esistente (deprecato) come "alias" per il nuovo nome e contrassegnare * l'alias * come deprecato. Il codice esistente sta usando il vecchio nome (l'alias) e quindi l'uso del nome del valore deprecato viene segnalato tramite un avvertimento dal compilatore. Questa risposta risolve perfettamente il problema e anche in modo abbastanza intelligente. – Deltics