c# - 自定义基于默认 SystemException 抛出的错误

标签 c# error-handling

我有一句话: string[] cPathDirectories = Directory.GetDirectories(Properties.Settings.Default.customerFolderDirectory);

如果用户未指定搜索路径(此时此设置保存为 String.Empty),则会抛出错误“路径不是合法形式”。我想抛出这个错误来表示“嘿,你这个白痴,进入应用程序设置并指定一个有效的路径”。有没有办法做到这一点而不是:

...catch (SystemException ex)
{
   if(ex.Message == "Path is not of legal form.")
      {
          MessageBox.Show("Hey you idiot, go into the application settings and specify a valid path","Error");
      }
      else
      {
          MessageBox.Show(ex.Message,"Error");
      }
}

最佳答案

不,您需要检查异常的类型并显式捕获它。测试异常消息中的字符串是一个坏主意,因为它们可能会从框架的一个版本更改为另一个版本。我很确定 Microsoft 不保证消息永远不会改变。

在本例中,查看 docs您可能会收到 ArgumentNullExceptionArgumentException,因此您需要在 try/catch block 中进行测试:

try {
    DoSomething();
}
catch (ArgumentNullException) {
    // Insult the user
}
catch (ArgumentException) {
    // Insult the user more
}
catch (Exception) {
    // Something else
}

你在这里需要哪种异常(exception),我不知道。您需要确定这一点并相应地构造您的 SEH block 。但始终 try catch 异常,而不是它们的属性。

请注意,强烈建议使用最后一个catch;它确保如果发生其他事情,您不会遇到未处理的异常。

关于c# - 自定义基于默认 SystemException 抛出的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12082935/

相关文章:

c# - 如何在 Visual Studio Web 2010 Express 中将 XNA 内容管道添加到 Silverlight 5?

javascript - 全局 ajaxError 处理程序 jquery

error-handling - react Hook 和异步等待: Handling errors with Axios call

c# - 类中的奇怪属性

c# - Dotnet webclient 超时,但浏览器可以处理 json web 服务的文件

c# - 无法在 Octokit.net 中将存储库内容作为 .zip 文件 (zipball)

c# - 在多个应用程序(旨在同时访问一个数据库)之间共享一个 Entity Framework 4 数据模型的最佳方式是什么?

java - 如何构建带有异常详细信息和 sendmail 按钮的 Struts 自定义错误页面

symfony - symfony2自定义错误页面并扩展

language-agnostic - 记录错误的最佳实践是什么?