返回后我应该在函数内调用Dispose()吗?

Cam*_*tin 9 .net c# vb.net dispose idisposable

我应该在返回实现IDisposable的对象后调用.Dispose()吗?

myDisposableObject Gimme() {
  //Code
  return disposableResult;
  disposableResult.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

换句话说,对象是我返回副本,还是对象本身?谢谢 :)

Guf*_*ffa 9

不,你不应该.您返回对该对象的引用,因此没有复制.在.NET中,除非您特别要求,否则永远不会复制对象.

此外,即使存在应该使用的情况,也不能使用类似的代码处理对象.return语句后面的代码永远不会执行,您将收到有关无法访问代码的警告.


Mar*_*tos 8

这是对象本身.不要在此处调用Dispose,即使您颠倒顺序以便调用它也是如此.


Joe*_*Joe 7

到目前为止,没有一个答案提到的一件事是,如果Gimme抛出异常,你应该处理该对象.例如:

MyDisposableObject Gimme() 
{
    MyDisposableObject disposableResult = null;
    try
    {
        MyDisposableObject disposableResult = ...

        // ... Code to prepare disposableResult

        return disposableResult;
    }
    catch(Exception)
    {
        if (disposableResult != null) disposableResult.Dispose();
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)