假设我有一个实现 IDisposable 的类 DisposableObject
。存在从任何构造函数和 DoStuff 函数中抛出异常的风险。我想做这样的事情,这样无论发生什么,对象都会被妥善处理:
编辑:我想避免重复代码,所以在每个 if/else block 中使用是不可取的(代码比这里复杂得多)
edit2:是的,try/finally 错误是错误的,将其更改为使用未分配的局部变量。
using (DisposableObject worker)
{
if(/*condition*/)
worker = new DisposableObject(/*args*/)
else
worker = new DisposableObject(/*other args*/)
worker.DoStuff();
}
但我不能,因为编译器说我必须在 using 语句中提供一个初始值设定项。 我也不能使用 try/finally:
DisposableObject worker;
try
{
if(/*condition*/)
worker = new DisposableObject(/*args*/)
else
worker = new DisposableObject(/*other args*/)
worker.DoStuff();
}
finally
{
worker.Dispose();
}
编译器说使用了未分配的局部变量“worker”。
那我该怎么办呢?显然我不能简单地这样下去......
DisposableObject worker;
if (/*condition*/)
worker = new DisposableObject(/*args*/)
else
worker = new DisposableObject(/*other args*/)
worker.DoStuff();
worker.Dispose();
因为我不能确定是否达到了 Dispose() 函数。
最佳答案
实际上,编译器说你正在使用一个可能未初始化的变量,所以只需初始化它:
DisposableObject worker = null;
try
{
if(/*condition*/)
worker = new DisposableObject(/*args*/)
else
worker = new DisposableObject(/*other args*/)
worker.DoStuff();
}
finally
{
if(worker != null)
worker.Dispose();
}
关于c# - `using` 带有未初始化变量的语句是不可能的,也不是最终的,那么如何正确处理呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380214/