我想将多个错误消息传递给GUI。我该怎么做?请简短看一下我上面的抽象示例:
try
{
LogIn(usr, pwd); //entry point
}
catch(Exception ex)
{
throw new Exception("Login failed.");
}
public void LogIn(string usr, string pwd) {
if(usr == "") {
throw new Exception("Username was empty.");
}
if(pwd== "") {
throw new Exception("Password was empty.");
}
try
{
//do some other stuff without a more specific error message
}
catch
{
throw;
}
}
稍后我想得到类似这样的结果错误消息
登录失败。密码为空。
如果用户未输入密码。现在,我只获得最后一条错误消息(“登录失败。”),因此我只想将一半信息提供给用户。
答案 0 :(得分:4)
您可以嵌套例外:
try
{
LogIn(usr, pwd); //entry point
}
catch(Exception ex)
{
throw new Exception("Login failed.", ex);
}
请注意第二个参数和Exception
的InnerException
属性。
但是在执行操作之前,请考虑上述代码块是否正在添加任何值。如果仅让Password was empty
异常转义,则调用者通常仍会知道登录失败,并且该异常似乎包含所有必需的信息。
只有catch
是例外,如果您有有用的要做的事情-如果您可以恢复错误情况,添加信息或不想向调用者公开实现细节。否则,让异常上升到可以完成有用的 的水平。
答案 1 :(得分:3)
我会重新考虑您的结构。 正如评论中指出的那样,有一些事情要考虑:
List<string>
来收集问题的方法:public void LogIn(string usr, string pwd)
{
List<string> errors = new List<string>();
if(string.IsNullOrEmpty(usr))
{
errors.Add("Username is empty.");
}
if(string.IsNullOrEmpty(pwd))
{
errors.Add("Password is empty.");
}
if(errors.Count > 0) // If errors occur, throw exception.
{
throw new Exception(string.Join("\r\n",errors));
}
}
答案 2 :(得分:1)
您可以只使用ex.Message
,它可以是密码为空。或用户名为空。