这是使用例外的正确方法吗?

Sha*_*ean 2 c# exception

我有一个会员资格例外,如下所示:

public enum MembershipError
{
    EmailNotFound,
    EmailNotConfirmed,
    IncorrectPassword,
    EmailExists
}

public class MembershipException : ApplicationException
{
    public MembershipError MembershipError { get; set; }

    public MembershipException(MembershipError membershipError)
        : base(Enum.GetName(typeof (MembershipError), membershipError))
    {
        MembershipError = membershipError;
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该在我的例外中使用枚举还是为每个枚举做一个例外?因为那时我会在捕获异常时使用逻辑:

try
{

}
catch (MembershipException exception)
{
    switch (exception.MembershipError)
    {
        case MembershipError.EmailExists:

            break;
            //etc.
    }
}
Run Code Online (Sandbox Code Playgroud)

我的服务层抛出这些异常,动作中的web层/捕获这些异常,生成正确的json并将其返回到视图.建议替代方案吗?

Jar*_*Par 5

例外情况仅应用于特殊情况.枚举中列出的错误似乎是相当标准的,我会选择不通过异常来表达它们.相反,我更喜欢TryXXX样式API而不是异常.

例如

public bool TryGetMembershipData(
  string user, 
  out Data data, 
  out MemberShipError error) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 我要将那些2`out`合并为1个类并返回它. (2认同)