相关疑难解决方法(0)

当没有指定的案例可以处理时,在switch语句中抛出异常

Let's say we have a function that changes a password for a user in a system in an MVC app.:

public JsonResult ChangePassword
    (string username, string currentPassword, string newPassword)
{
    switch (this.membershipService.ValidateLogin(username, currentPassword))
    {
        case UserValidationResult.BasUsername:
        case UserValidationResult.BadPassword:
            // abort: return JsonResult with localized error message        
            // for invalid username/pass combo.
        case UserValidationResult.TrialExpired
            // abort: return JsonResult with localized error message
            // that user cannot login because their trial period has expired
        case UserValidationResult.Success:
            break;
    }

    // NOW change password …
Run Code Online (Sandbox Code Playgroud)

c# exception switch-statement

59
推荐指数
1
解决办法
3万
查看次数

抛出未处理的枚举值的正确异常是什么?

这是我关于未处理的枚举案件的另一个问题的另一个案例,我建议将其作为一个单独的问题提出.

假设我们有SomeEnum一个switch语句处理它,如:

enum SomeEnum
{
  One,
  Two
}

void someFunc()
{
  SomeEnum value = someOtherFunc();
  switch(value)
  {
     case One:
       ... break;
     case Two:
       ... break;
     default:
         throw new ??????Exception("Unhandled value: " + value.ToString());    
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我们处理所有可能的枚举值但仍保留默认值,以防添加新成员,并且我们希望确保我们知道缺少的处理.

我的问题是:在你想要通知给定的代码路径没有被处理/实现或者从未被访问过的情况下,什么是正确的异常?我们曾经使用NotImplementedException但它似乎不合适.我们的下一个候选人是,InvalidOperationException但这个词听起来不对.什么是正确的,为什么?

.net c# exception

33
推荐指数
5
解决办法
2万
查看次数

标签 统计

c# ×2

exception ×2

.net ×1

switch-statement ×1