加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 最佳实践返回值vs异常与枚举

发布时间:2020-12-15 18:00:03 所属栏目:百科 来源:网络整理
导读:我试图找出具有多个结果值的方法的优点和缺点. 例如我正在使用登录方法.如果登录成功,它将通过,否则我需要知道为什么它失败. 1.返回true或false(没有足够的信息) bool Login(string user,string password); 2.返回true,如果成功,否则抛出异常 public class U
我试图找出具有多个结果值的方法的优点和缺点.

例如我正在使用登录方法.如果登录成功,它将通过,否则我需要知道为什么它失败.

1.返回true或false(没有足够的信息)

bool Login(string user,string password);

2.返回true,如果成功,否则抛出异常

public class UnknownUserException : Exception { }
public class WrongPasswordException : Exception { }
bool Login(string user,string password);

没有回报抛出异常,如果不成功

public class UnknownUserException : Exception { }
public class WrongPasswordException : Exception { }
void Login(string user,string password);

4.返回一个枚举值

enum LoginResult
{
    Successful
    UnknownUser,WrongPassword
}
LoginResult Login(string user,string password);

“登录”只是一个例子.我想知道不同实现的优点和缺点是什么,在哪种情况下,它们或多或少是适当的.

解决方法

你会得到更多的有意见的答案,如果我在做,我会结合3& 4.用一个枚举来抛出LoginFailedException为什么.
void Login(string user,string password);//Or return a bool(redundant though)

class LoginFailedException : ApplicationException
{
    public LoginFailReason Reason {get; private set;}
    public LoginFailedException(LoginFailReason reason)
    {
       this.Reason = reason;
    }
}

enum LoginFailReason
{
    UnknownUser,WrongPassword
}

选择异常选项的原因:
假设您选择仅返回值方法,您的api(可能是客户端或其他开发人员)的用户可以有机会忽略该API.

instance.Login(user,password);
var accountInfo = instance.GetAccountInfo();//Assuming logged in; going to explode

谁知道他们必须这样做

if(instance.Login(user,password) == LoginResult.Successful))
{
    var accountInfo = instance.GetAccountInfo();
}

所以,IMO抛出异常表示我无法处理你的登录请求由于这样的原因.使简单

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读