首页 > 解决方案 > “使用”输出参数

问题描述

假设我有一个简单的一次性类:

class CanDispose : IDisposable
{
   ...
}

现在我显然可以将它放在“使用”块中以使其处置:

using (var myDisposable = new CanDispose())
{
    ...
}

但是,如果我有一个通过 out 参数返回一次性的工厂方法怎么办?在我的示例中,可以有多个回报,因此多个出局是干净的:

public bool CreateDisposable(out CanDispose canDispose)
{
   canDispose = new CanDispose();
   ...
   return ret; 
}

如何将其放在 using 语句中?简单地将函数调用放入 using 块似乎不起作用。我是否必须求助于返回元组(这行得通吗?),还是有更简单的方法?

请注意,这似乎不起作用。至少它不会在超出范围之前关闭关于处置的警告:

using (CreateDisposable(out CanDispose myDispose))
{
    ....
}

标签: c#

解决方案


using语句不必声明变量。将一次性作为out参数并不理想,您应该在自己的代码中避免使用它,但是如果您正在使用执行此操作的库,则可以using在调用方法后简单地将变量放入块的表达式中。

CreateDisposable(out CanDispose myDispose);
using (myDispose)
{
}

推荐阅读