c# – 如何使用InvalidEnumArgumentException维护代码?

我很好奇,一旦抛出System.ComponentModel.InvalidEnumArgumentException,你将如何维护你的代码.

基本上我有一个像这样的开关语句:

switch (enumValue)
{
    case MyEnum.Value1:
        break;

    case MyEnum.Value2:
        break;

    default:
        throw new InvalidEnumArgumentException();
}

如果我决定将来向MyEnum添加更多值,例如Value3和Value4,该怎么办?这意味着我最终会抛出一个误导性的例外.我该如何防止这种情况?

我应该在投掷之前使用反射吗?在这种情况下我应该抛出什么异常?我正在寻找建议.

我刚刚在几分钟前发现了这个例外,所以也许我在错误的背景下看这个.当不支持某个枚举参数时会抛出此异常(在这种情况下,不支持Value3和Value4)?

解决方法

您声明的问题取决于上下文,如果方法接收枚举作为参数,则必须指定它支持的值以及它对未知枚举值的作用.

如果添加更多枚举选项,即使未在认情况下抛出异常,也需要确定要执行的操作.

请注意,异常特别有用,因为您可以将任何整数作为枚举值传递.

例如:

enum Foo { A,B }

static int Bar(Foo f)
{
    switch (f)
    {
        case Foo.A:
            return 1;
        case Foo.B:
            return 2;
        default:
            throw new InvalidEnumArgumentException("f",(int)f,typeof(Foo));
    }
}

static void Main()
{
    Bar(Foo.A);
    Bar((Foo)99);
}

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...