微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我试图找出具有多个结果值的方法的优点和缺点.

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

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抛出异常表示我无法处理你的登录请求由于这样的原因.使简单

原文地址:https://www.jb51.cc/csharp/97209.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐