2011-12-21 15 views
24

enumを返す非難された(Obsolete)関数があり、enumのListを返す新しい関数があります。 enum値enum deprecated c#

一つは、(それが一覧にすることができないため)として廃止列挙メンバーを設定するので、それが可能である、唯一の非推奨の関数で使用されて?

+1

['ObsoleteAttribute'](http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx)を使用してみましたか? –

+2

いくつかのコードを見る必要があります... – BoltClock

+8

@BoltClockなぜですか?私はちょうど古いものとして列挙型を設定したいと思っています... – JohnJohnGa

答えて

37

することができます、確かに:

public enum EE 
{ 
    A, 

    [Obsolete] 
    B 
} 
1

私は列挙型でこれを試していませんでしたが、このような何かがうまくいくかもしれない:

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

推測を投稿する前に、実際の回答が表示されるまで数日または数週間を許可することをお勧めします。実際には、あなたの推測を投稿するのではなく、実際の答えを投稿することができます。 – Spike0xff

+2

明らかに 'Obsolete'属性を' enum'全体に入れることは、単一の値に置くことと同じではありません。 OPは特定の 'enum'値を除外したいと考えています。 – Phil1970

-1

他のポスターが指摘したように、あなたがObsoleteAttributeを追加することができます列挙型メンバに渡しますが、それはあなたのコードで引き続き使用できます。列挙型メンバをプログラム的に除外する方法はありません。つまり、列挙型に存在する場合はコンパイルエラーまたは例外を生成します。属性を追加すると、開発者に警告が表示されます。

+5

これは間違っています。[IsError](http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.iserror.aspx)というプロパティがあり、これがtrueの場合はコンパイラエラーになります警告の代わりに。 –

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

これは、[廃止]属性を使用する場合はいつでも動作します。