如何为输出参数创建处置模式(消息 IDE0068)

How to create a dispose pattern for out parameters (Message IDE0068)

考虑这样的代码:

System.Data.DataTable dt = new DataTable();

像这样的代码可能会在 Visual Studio 的错误列表中给出一条消息:IDE0068 使用推荐的处置模式以确保由“...”创建的对象在所有路径上处置: 使用 statement/declaration 或 try/finally。因此,将其包装在 using 块中将确保 dt 实例被处理掉。

但是这个案例呢:

SomeFunction(out DataTable dt);

这种情况下如何处置dt?将其包装在 using 块中似乎不被接受:

using (DataTable dt = new DataTable()) {
/*dt needs to be initialised above otherwise this line won't compile*/
  SomeFunction(out DataTable dt);
  /* Above line: cannot use dt as ref or out variable because it is a 'using variable'*/
}

可以在这里使用 using 还是我需要在块的末尾调用类似 dt?.Dispose(); 的东西?

我很确定 using 块接受一个表达式,而不仅仅是一个声明,所以你可以在得到它后立即包装它。

SomeFunction(out var dt);
using (dt)
{
    // Your logic here...
}