c# - `using` 带有未初始化变量的语句是不可能的,也不是最终的,那么如何正确处理呢?

标签 c#

假设我有一个实现 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/

相关文章:

c# - Double.MaxValue 为整数是否为负数?

c# - 无法加载 Microsoft.Data.Services.Client 异常

c# - 使用 IContainers 比直接使用 ObjectFactory (结构图)更好吗?

c# - 单元测试删除,即使在数据库中删除了记录也返回

c# - DataType 的 DataTemplate - 如何在特定的 ListBox 中覆盖此 DataTemplate?

c# - 使用 httpwebrequest 调用 Web 服务方法 - 无法连接到远程服务器错误

c# - 在 C# 中计算图像的 MD5 校验和

c# - 生产者/消费者 msdn 示例如何工作?

c# - 在没有实际文件的情况下使用 FileStream

c# - 对象序列化——从 C# 或 java 到 Objective C