2011-12-21 220 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]属性,这都可以工作。