我有一句话:
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您可能会收到 ArgumentNullException
或 ArgumentException
,因此您需要在 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/