我试图找出具有多个结果值的方法的优点和缺点.
例如我正在使用登录方法.如果登录成功,它将通过,否则我需要知道为什么它失败.
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);
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 举报,一经查实,本站将立刻删除。