我得到了这个引发相同类型异常的类,我如何捕获此异常并显示相应的错误消息。这就是我现在所做的。
public bool ChangePassword(oldPassword,newPassword)
{
if(oldPassword != savedInDatabase)
{
throw new ArgumentException("Your old password is not same as one saved in our database")
}
if(string.IsNullOrEmpty(oldPassword) || string.IsNullOrEmpty(newPassword))
{
throw new ArgumentException("Your old or new password is empty of null");
}
}
我在下面做,
try
{
}
catch(ArgumentException ex)
{
if(ex.Message.contains("Your old or"))
{
messagebox.show("Either your old or new password is empty or null")
}
...
}
答案 0 :(得分:2)
您可以考虑抛出不同的异常类型。如果您希望坚持使用库异常类型,那么如果旧密码或新密码为空或空,则ArgumentNullException
是合适的。或者,您可以考虑使用更具体的错误定义自己的异常类型(可能类似于WCF中的FaultExceptions),或者在自定义异常中包含资源标识符(以确保I18N兼容):
public class ResourceableException : Exception
{
public string ResourceKey { get;set; }
}
然后像这样使用:
try { ... }
catch (ResourceableException e)
{
messagebox.Show(ResourceManager.GetResource(e.ResourceKey));
}
答案 1 :(得分:2)
您的示例并不能证明自定义异常的合理性。我说只是显示原始信息。
但是,如果你真的想沿着自定义异常的路径前进,那么另一个选择就是创建一个自定义异常,它带有enum
所有不同的选项,如:
public class PasswordException : Exception
{
public PasswordException(PasswordResult result) : base() { }
public PasswordException(PasswordResult result, string message) : base(message) { }
public PasswordException(PasswordResult result, string message, Exception innerException) : base(message, innerException) { }
}
public enum PasswordResult
{
Success = 0,
PasswordMismatch,
PasswordEmpty,
// and so forth
}
答案 2 :(得分:1)
您可以像这样创建自定义例外:
public class PasswordEmptyOrNullException : Exception
{
public PasswordEmptyOrNullException(string message)
: base(message)
{
}
}
public class OldPasswordNotFoundException : Exception
{
public OldPasswordNotFoundException(string message)
: base(message)
{
}
}
然后可以像这样使用它们:
throw new PasswordEmptyOrNullException("A message");
然后你可以在这样的try catch语句中处理它们:
try
{
}
catch (PasswordEmptyOrNullException ex)
{
// Do stuff
}
catch (OldPasswordNotFoundException ex)
{
// Do stuff
}
因此,您可以通过不同方式处理不同类型的异常。希望这就是你要找的东西。