枚举值隐藏在C#中

Tom*_*Tom 3 c# enums

我有一个枚举,我想"隐藏"其中一个值(因为我添加它以供将来支持).代码是用C#编写的.

public enum MyEnum
{
   ValueA = 0,

   ValueB = 1,

   Reserved
}
Run Code Online (Sandbox Code Playgroud)

我不想允许使用此代码的人使用此值(MyEnum.Reserved).任何的想法?TIA

Ray*_*Ray 10

你可以使用'过时'属性 - 语义不正确,但它会做你想要的:

public enum MyEnum 
{ 
  ValueA = 0, 
  ValueB = 1, 
  [Obsolete("Do not use this", true)]
  Reserved 
}
Run Code Online (Sandbox Code Playgroud)

任何试图使用该Foo.Reserved项目编译的人都会收到错误


dtb*_*dtb 5

如果您不想显示它,请不要包含它:

public enum MyEnum
{
    ValueA = 0,
    ValueB = 1,
}
Run Code Online (Sandbox Code Playgroud)

请注意,此枚举的用户仍然可以将任何整数值分配给声明为MyEnum的变量:

MyEnum e = (MyEnum)2;  // works!
Run Code Online (Sandbox Code Playgroud)

这意味着接受枚举的方法应始终在使用之前验证此输入:

void DoIt(MyEnum e)
{
    if (e != MyEnum.ValueA && e != MyEnum.ValueB)
    {
        throw new ArgumentException();
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

因此,只需在以后需要时添加您的值,然后修改您的方法以接受它.