2011-12-21 13 views
24

Ho una funzione obsoleta (Obsoleta) che restituisce un enum e ho una nuova funzione che restituisce un elenco di enumerazioni.Enum deprecato C#

Uno dei valori di enumerazione viene utilizzato solo in funzione obsoleta, quindi è possibile impostare un organo enum come obsoleto (perché non può essere nella lista)?

+1

Hai provato a utilizzare ['ObsoleteAttribute'] (http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx)? –

+2

Hai bisogno di vedere qualche codice ... – BoltClock

+8

@BoltClock perché? Voglio solo impostare un enum come obsoleto ... – JohnJohnGa

risposta

37

Certo, è possibile:

public enum EE 
{ 
    A, 

    [Obsolete] 
    B 
} 
1

Non ho provato questo su un enum, ma qualcosa di simile potrebbe funzionare:

[Obsolete("Please use ... instead!")] 
public enum MyEnum 
{ 
    One, 
    Two, 
    Three 
} 
+2

Ti suggerisco di consentire diversi giorni o settimane prima che una vera risposta appaia, prima di postare un'ipotesi. In realtà, perché non testare la tua ipotesi invece di postarla, in modo da poter pubblicare una risposta reale o nulla. – Spike0xff

+2

Ovviamente mettere l'attributo 'Obsoleto' sull'intero' enum' non è lo stesso che metterlo su un singolo valore. Sembra che l'OP voglia escludere un particolare valore di 'enum'. – Phil1970

-1

Come altri utenti hanno fatto notare, è possibile aggiungere il ObsoleteAttribute al membro enum, ma può ancora essere usato nel tuo codice. Non c'è modo di escludere in modo programmatico il membro di enum che produce errore di compilazione o eccezione se esiste nell'enumerazione. L'aggiunta dell'attributo avviserà solo lo sviluppatore.

+5

Non è corretto, esiste una proprietà [IsError] (http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.iserror.aspx) che, se è true, causerà un errore del compilatore invece di un avvertimento. –

27

In realtà, è possibile generare avvisi del compilatore o errori del compilatore.

public enum TestEnum 
{ 
    A, 
    [Obsolete("Not in use anymore")] 
    B, 
    [Obsolete("Not in use anymore", true)] 
    C, 
} 

public class Class1 
{ 
    public void TestMethod() 
    { 
     TestEnum t1 = TestEnum.A; //Works just fine. 
     TestEnum t2 = TestEnum.B; //Will still compile, but generates a warning. 
     TestEnum t3 = TestEnum.C; //Will no longer compile. 
    } 
} 

Questo funzionerà ovunque si utilizzi un attributo [Obsoleto].