- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我很好奇一旦抛出 System.ComponentModel.InvalidEnumArgumentException
,您将如何维护您的代码。
基本上我有一个这样的 switch 语句:
switch (enumValue)
{
case MyEnum.Value1:
break;
case MyEnum.Value2:
break;
default:
throw new InvalidEnumArgumentException();
}
如果我决定在将来向 MyEnum
添加更多值,例如 Value3
和 Value4
怎么办?那将意味着我最终会抛出一个误导性的异常。我该如何防止这种情况发生?
我应该在 throw 前使用反射吗?在这种情况下我应该抛出什么异常?我正在寻找建议。
我几分钟前才发现这个异常,所以我可能是在错误的背景下看待这个问题。当不支持某个枚举参数时是否抛出此异常(在这种情况下 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);
}
关于c# - 如何使用 InvalidEnumArgumentException 维护代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6546347/
我很好奇一旦抛出 System.ComponentModel.InvalidEnumArgumentException,您将如何维护您的代码。 基本上我有一个这样的 switch 语句: switch
我已经看到了针对这两者的建议,但我想确认这是执行此操作的最佳方法: public enum MO { Learn = 0, Practice = 1, Quiz = 2 } publ
有没有类似InvalidEnumArgumentException的东西在java中? 用例: public FigureType determinateFigureType(int row, int
我很惊讶地发现 InvalidEnumArgumentException 在 Silverlight 4 中已经过时了。 有人知道为什么吗?我发现这是一个非常有用的异常(exception),尤其是在
我是一名优秀的程序员,十分优秀!