C# · 12月 22, 2021

c# – 当一个未知值传递给switch语句时,我应该抛出什么类型的Exception

编辑1

更新以使枚举不是方法的参数…

使用switch语句中的枚举会出现这种类型的问题.在示例代码中,开发人员已考虑该程序当前使用的所有国家/地区,但如果将另一个国家/地区添加到Country枚举,则应抛出异常.我的问题是,应该抛出什么类型的异常?

示例代码:

enum Country{ UnitedStates,Mexico,}public string GetCallingCode(Guid countryId){ var country = GetCountry(countryId); switch (country) { case Country.UnitedStates: return “1”; break; case Country.Mexico: return “52”; break; default: // What to throw here break; }}

我看了看

> NotImplemented,未实现请求的方法或操作时引发的异常.
> NotSupported基类中不支持某些方法,期望这些方法将在派生类中实现.派生类可能只实现基类中的方法的子集,并为不支持的方法抛出NotSupportedException.
对于有时可能对象执行请求的操作,并且对象状态确定是否可以执行操作的情况,请参阅InvalidOperationException.
如果调用方法失败是由无效参数以外的原因引起的,则使用> InvalidOperation.

我的猜测是NotImplemented或Invalid Operation.我应该使用哪一个?有人有更好的选择(我知道滚动你自己总是一个选项)

解决方法 我会使用ArgumentException,因为agrument无效.

编辑:http://msdn.microsoft.com/en-us/library/system.argumentexception%28v=vs.71%29.aspx

还有InvalidEnumArgumentException,它可能更准确地描述问题,但是,我之前没有看到任何人使用它.