c# - 我如何捕获异常块内引发的异常
问题描述
我正在开发一个 .net 控制台应用程序,并且我有以下代码:-
try {
SPFile destFile = projectid.RootFolder.Files.Add(destUrl, fileBytes, false);
} catch (System.IO.DirectoryNotFoundException e) {
SPFile destFile = projectid.RootFolder.Files.Add(destUrl, fileBytes, false);
} catch {}
try
现在,如果在块内引发异常,其他 2 个catch
块将捕获它,具体取决于异常类型!!。但如果在块内引发异常,catch (System.IO.DirectoryNotFoundException e)
则控制台将结束。现在我想如果在块内引发异常catch (System.IO.DirectoryNotFoundException e)
,那么catch
将到达最后一个块,但似乎情况并非如此..所以任何人都可以建议我如何捕获在 Exception 块内引发的异常?
解决方案
你应该注意到try-catch 永远不应该成为你代码逻辑的一部分,这意味着你永远不应该使用 try-catch 来控制你的分支。这就是为什么你会发现很难让异常流过你的每个 catch 块的原因。
如果你想赶上第二块,你可以这样写(但不推荐):
try
{
SPFile destFile = projectid.RootFolder.Files.Add(destUrl, fileBytes, false);
}
catch (System.IO.DirectoryNotFoundException e)
{
try
{
SPFile destFile = projectid.RootFolder.Files.Add(destUrl2, fileBytes, false);
}
catch
{
// Do what you want to do.
}
}
catch
{
}
你最好不要像上面这样写。相反,建议像这样检测前面存在的文件夹:
try
{
YourMainMethod();
}
catch (Exception ex)
{
// Handle common exceptions that you don't know when you write these codes.
}
void YourMainMethod()
{
var directory = Path.GetDirectoryName(destUrl);
var directory2 = Path.GetDirectoryName(destUrl2);
if (Directory.Exists(directory))
{
SPFile destFile = projectid.RootFolder.Files.Add(destUrl, fileBytes, false);
}
else if (Directory.Exists(directory2))
{
SPFile destFile = projectid.RootFolder.Files.Add(destUrl2, fileBytes, false);
}
else
{
// Handle the expected situations.
}
}
推荐阅读
- lambda-calculus - Lambda 演算:重新排序变量
- ansible - Ansible 导入角色有条件地运行
- python - 加权平均值作为 Pandas 中的一列
- sql-server - 跨域委托 - 环回
- java - 缺少 Java 16 tools.jar
- logging - 每次SSIS包执行时如何覆盖日志文件?我正在使用文本文件类型的日志提供程序
- flutter - 使用 Firebase 收听 Stream 与 StreamBuilder 的结果不同
- kotlin - when 语句中的多个条件
- java - 我正在尝试使用 HC-05 模块制作一个通过蓝牙交换数据的应用程序
- android - 无法访问外部库中的本机文件 - android