如何为输出参数创建处置模式(消息 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...
}
考虑这样的代码:
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...
}