使用初始化的内部异常
本文关键字:内部 异常 初始化 | 更新日期: 2023-09-27 18:35:44
我在 C# 中阅读了许多关于 using
关键字的帖子,但我找不到有相同问题的人。阅读这篇有趣的文章,它说 using 语句基本上等同于 try/catch 块:
MyResource myRes= new MyResource();
try
{
myRes.DoSomething();
}
finally
{
// Check for a null resource.
if (myRes!= null)
// Call the object's Dispose method.
((IDisposable)myRes).Dispose();
}
真正让我发疯的是,对象初始化myRes= new MyResource()
仍然在 try/catch 块之外,所以如果在初始化过程中出现问题(哦,确实如此!除了使用普通的 try/catch 块之外,我没有其他方法可以处理它。
这是正确的还是我错过了什么?在我看来,这使得using
陈述的意义部分无用。
我也尝试了这样的事情:
using (MyResource myRes)
{
myRes = new MyResource();
myRes.DoSomething();
}
但是编译器不喜欢这样,因此不可能将初始化带到 try 块中。
这对我来说似乎很奇怪,我想我一定错过了什么。谁能解释一下这背后的原因?
如果构造函数失败,将抛出异常而不是返回引用 - 因此调用代码没有任何要处理的内容。
基本上,构造函数需要小心。如果在异常中引发异常,构造函数需要确保没有资源泄漏,因为没有其他资源有机会清理。