gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:08:30 25 4
gpt4 key购买 nike

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

基本上我有一个这样的 switch 语句:

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

case MyEnum.Value2:
break;

default:
throw new InvalidEnumArgumentException();
}

如果我决定在将来向 MyEnum 添加更多值,例如 Value3Value4 怎么办?那将意味着我最终会抛出一个误导性的异常。我该如何防止这种情况发生?

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


我几分钟前才发现这个异常,所以我可能是在错误的背景下看待这个问题。当不支持某个枚举参数时是否抛出此异常(在这种情况下 Value3Value4 将不被支持)?

最佳答案

您陈述的问题取决于上下文,如果方法接收枚举作为参数,则它必须指定它支持哪些值以及它对未知枚举值执行的操作。

如果您添加更多枚举选项,您需要决定要做什么,即使您在默认情况下没有抛出异常也是如此。

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

例如:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com