如何在系统枚举中添加新的枚举?

时间:2018-01-08 11:01:22

标签: c# enums

如何在系统枚举中添加新枚举?

我想在MessageBoxButton枚举中添加一个新的按钮类型(无= 6):

默认列表是:

MessageBoxButton.Ok=0
MessageBoxButton.Cancel=1
MessageBoxButton.AbortRetryIgnore=2
MessageBoxButton.YesNoCancel=3
MessageBoxButton.YesNo=4
MessageBoxButton.RetryCancel=5

我想添加一个新成员:

MessageBoxButton.None=6

1 个答案:

答案 0 :(得分:1)

要实际更改枚举,您需要提交更改请求,说服人们(不同的人对.NET Core和.NET Framework进行更改)这是一个好主意,没有明显的向后兼容性问题,然后等到进行了更改并使用新的框架版本。

这显然不是一个实际的短期措施。

要在枚举上获得额外的值,您只需使用它并查找它:

public static MessageBoxButton ReturnExtendedValue()
{
    return (MessageBoxButton)6;
}

public static bool IsMessageBoxButtonThePrivatelyUsedExtraValue(MessageBoxButton value)
{
    return value == (MessageBoxButton)6;
}

void Main()
{
    Console.WriteLine(
        IsMessageBoxButtonThePrivatelyUsedExtraValue(
            ReturnExtendedValue())); // Prints "True"
}

通常,enum不会将值限制为枚举定义的值,它只是给出了一些值的含义。您可以自由地将自己的含义应用于定义范围之外的值。

但总的来说,这不是一个好主意。首先,您不知道您分配的新值将不会在未来版本的框架中使用。你可能最好分开状态,bool返回是否有按钮按下,out MessageBoxButton表示如果有按钮是什么。

如果您要使用超出定义范围的值,则使用负值可能(但不能保证)具有较少的向前兼容性问题。