【发布时间】:2010-10-11 19:42:07
【问题描述】:
假设我们有一个接受枚举值的方法。在此方法检查该值是否有效后,它会switches 覆盖可能的值。所以问题是,在验证值范围之后处理意外值的首选方法是什么?
例如:
enum Mood { Happy, Sad }
public void PrintMood(Mood mood)
{
if (!Enum.IsDefined(typeof(Mood), mood))
{
throw new ArgumentOutOfRangeException("mood");
}
switch (mood)
{
case Happy: Console.WriteLine("I am happy"); break;
case Sad: Console.WriteLine("I am sad"); break;
default: // what should we do here?
}
处理default 案件的首选方法是什么?
- 留言
// can never happen -
Debug.Fail()(或Debug.Assert(false)) -
throw new NotImplementedException()(或任何其他例外) - 我没想到的其他方式
【问题讨论】:
-
我根据自己的观点发布答案。如果您有不同的意见,或支持这一观点的不同案例,请分享您的知识。该问题的目的是收集有关该主题的想法,以帮助其他人(和我)面临这种情况。
-
@Oscar:恕我直言,这应该是一个与语言无关的问题。人们可以在这里找到两种语言的答案。
-
枚举验证对我来说很奇怪。我不使用java,可能就是这个原因。您能否描述一下该代码可能引发 ArgumentOutOfRangeException 的情况?
-
@DK:在 Java 中这永远不会发生,但在 C# 中却可能发生,因为枚举可以来回转换为整数。例如,像
PrintMood((Mood)10)这样的调用在 C# 中是有效的,但所传递的值就方法而言是无效的。 -
反对者:欢迎 cmets!
标签: c# java .net language-agnostic enums