我试图找出具有多个结果值的方法的优点和缺点.
例如我正在使用登录方法.如果登录成功,它将通过,否则我需要知道为什么它失败.
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抛出异常表示我无法处理你的登录请求由于这样的原因.使简单