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

前端之家收集整理的这篇文章主要介绍了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.返回一个@R_502_430@

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.f2er.com/csharp/97209.html

猜你在找的C#相关文章