gpt4 book ai didi

c# - 无法处理指定情况时在 switch 语句中抛出异常

转载 作者:IT王子 更新时间:2023-10-29 03:46:33 25 4
gpt4 key购买 nike

假设我们有一个函数可以在 MVC 应用程序的系统中更改用户的密码。

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 now that user is validated
}

membershipService.ValidateLogin() 返回定义为的 UserValidationResult 枚举:

enum UserValidationResult
{
BadUsername,
BadPassword,
TrialExpired,
Success
}

作为一名防御型程序员,我会更改上面的 ChangePassword() 方法,以便在 ValidateLogin():

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;
default:
throw new NotImplementedException
("Unrecognized UserValidationResult value.");
// or NotSupportedException()
break;
}

// Change password now that user is validated
}

我一直认为像上面最后一个片段这样的模式是最佳实践。例如,如果一个开发人员要求现在当用户尝试登录时,如果出于这个或那个业务原因,他们应该首先联系业务怎么办?所以 UserValidationResult 的定义更新为:

enum UserValidationResult
{
BadUsername,
BadPassword,
TrialExpired,
ContactUs,
Success
}

开发人员更改了 ValidateLogin() 方法的主体以在适用时返回新的枚举值 (UserValidationResult.ContactUs),但忘记更新 ChangePassword ()。如果开关中没有异常,即使用户的登录尝试一开始就不应该被验证,用户仍然可以更改密码!

是我一个人,还是这个 default: throw new Exception() 是个好主意?几年前我看到了它,并且总是(摸索之后)认为它是最佳实践。

最佳答案

在这种情况下,我总是抛出异常。考虑使用 InvalidEnumArgumentException ,在这种情况下提供了更丰富的信息。

关于c# - 无法处理指定情况时在 switch 语句中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3349540/

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