2012-02-23 8 views
17

deseo tener lo siguiente:cómo marcar como obsoletos un único valor de enumeración en Delphi

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

Devuelve:

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

¿Hay una manera de dar instrucciones al compilador que este valor es obsoleto.

+1

No creo que eso sea posible, una solución sería utilizar {$ MENSAJE WARN 'TEnumType.etValue2 está en desuso'} para permitir que los usuarios saben que es obsoleto ... – ComputerSaysNo

+1

La respuesta simple es no –

+4

@dorin Eso no es bueno. Eso solo crea una advertencia cada vez que compila en lugar de cuando usa el símbolo. –

Respuesta

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

¿No es eso simplemente una devaluación de etValue2, y no de etDeprecated2? –

+0

@Rudy: Claro, pero la suposición es que etValue2 solía declararse en la enumeración y se refactorizó a lo anterior. – afrazier

+7

@Rudy - sí, pero ese era el objetivo. Reemplace el valor de la enumeración real con un nombre que no se utilizará, luego declare el valor de la enumeración existente (en desuso) como un 'alias' para el nuevo nombre y marque que * alias * como obsoleto. El código existente usa el nombre antiguo (el alias) y, por lo tanto, el uso del nombre del valor obsoleto se informa a través de una advertencia del compilador. Esta respuesta resuelve el problema perfectamente, y bastante inteligentemente también. – Deltics

Cuestiones relacionadas