2011-12-21 221 views
24

我有一個棄用(廢棄)函數返回一個枚舉,並且我有一個新的函數返回一個枚舉列表。已棄用c#

其中枚舉值的僅用於不推薦使用的功能,所以是有可能設置一個枚舉構件爲過時(因爲它不能在列表)?

+1

您是否嘗試過使用['ObsoleteAttribute'](http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx)? – 2011-12-21 10:58:27

+2

需要看一些代碼... – BoltClock 2011-12-21 10:58:32

+8

@BoltClock爲什麼?我只是想設置一個枚舉爲過時... – JohnJohnGa 2011-12-21 10:59:37

回答

37

當然,你可以:

public enum EE 
{ 
    A, 

    [Obsolete] 
    B 
} 
1

我沒試過在一個枚舉,但這樣的事情可能工作:

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

我建議你允許幾天或幾周出現一個真實的答案,然後發佈猜測。其實,爲什麼不測試你的猜測而不是發佈它,所以你可以發佈一個真正的答案或沒有。 – Spike0xff 2015-08-04 17:07:13

+2

顯然在整個'enum'上放置'Obsolete'屬性與將它放在單個值上不同。看來OP想排除一個特定的'enum'值。 – Phil1970 2017-01-31 16:35:40

-1

正如其他海報指出,你可以添加ObsoleteAttribute到枚舉成員,但它仍然可以在您的代碼中使用。沒有辦法以編程方式排除枚舉成員,即如果它存在於枚舉中,則會產生編譯錯誤或異常。添加屬性只會向開發人員發出警告。

+5

這是不正確的,有一個屬性[IsError](http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.iserror.aspx),如果爲true,將導致它成爲編譯器錯誤而不是警告。 – 2013-06-18 14:29:04

27

實際上,可能會生成編譯器警告或編譯器錯誤。

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

無論你使用[Obsolete]屬性,這都可以工作。