2011-12-21 15 views
24

Mam przestarzałą funkcję, która zwraca wyliczenie, i mam nową funkcję, która zwraca listę wyliczeń.Enum przestarzałe C#

Jednym z wartości enum jest używany tylko w funkcji nieaktualnych, więc jest to możliwe, aby ustawić członek enum jako przestarzałe (ponieważ nie może znajdować się na liście)?

+1

Czy próbowałeś użyć ['ObsoleteAttribute'] (http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx)? –

+2

Potrzebujesz zobaczyć kod ... – BoltClock

+8

@BoltClock dlaczego? Chcę tylko ustawić wyliczenie jako przestarzałe ... – JohnJohnGa

Odpowiedz

37

Jasne, można:

public enum EE 
{ 
    A, 

    [Obsolete] 
    B 
} 
1

ja nie próbowałem tego na wyliczenia, ale coś takiego może działać:

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

Sugeruję, abyś zezwolił na kilka dni lub tygodni, zanim pojawi się prawdziwa odpowiedź, zanim opublikujesz przypuszczenie. Właściwie, dlaczego nie przetestować swojej domysły, zamiast go opublikować, aby można było wysłać realną odpowiedź lub nic. – Spike0xff

+2

Oczywiście umieszczenie atrybutu "Przestarzałe" na całym "wyliczeniu" nie jest tym samym, co umieszczenie go na pojedynczej wartości. Wygląda na to, że OP chce wykluczyć określoną wartość 'enum'. – Phil1970

-1

Jak inne plakaty wskazał, można dodać ObsoleteAttribute do członka wyliczającego, ale nadal można go używać w kodzie. Nie ma możliwości programowego wykluczenia elementu wyliczającego, tj. Wygenerowania błędu kompilacji lub wyjątku, jeśli istnieje w wyliczeniu. Dodanie atrybutu ostrzega tylko programistę o tym.

+5

To jest niepoprawne, istnieje właściwość [IsError] (http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.iserror.aspx), która jeśli jest prawdziwa, spowoduje, że będzie to błąd kompilatora zamiast ostrzeżenia. –

27

W rzeczywistości możliwe jest generowanie ostrzeżeń kompilatora lub błędów kompilatora.

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. 
    } 
} 

to będzie działać wszędzie tam, gdzie używasz [Przestarzałe] atrybut.