有没有理由在finally块中将对象设置为null?

Cod*_*gel 9 c#

我正在为我的公司清理一些C#代码,我注意到的一件事是构建此应用程序的承包商将对象引用设置为null.

例:

get {
  Object o = new Object(); // create a new object that is accessed by the reference 'o'
  try {
   // Do something with the object
  }
  finally {
    o = null; // set the reference to null
  }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,创建的对象仍然存在.有可能它现在无法访问,具体取决于是否有任何其他引用,但它仍然存在,直到GC到来并清理它.

有没有理由在最后一个块中有这个?在任何情况下,这可能会产生广告中的内存泄漏吗?

谢谢!

poy*_*poy 14

这取决于范围.

在您给出的示例中,o仅在属性的范围内定义.所以它将毫无用处.但是,据说o属于班级范围.然后它可能有意义表示状态o.

目前,它不是必需的.


dca*_*tro 6

如果目的是让GC尽快收集对象,那么它完全没用.

如果引用的对象o未在try块之后的任何地方使用,则在最后一次使用之后(即,在变量o超出范围之前,并且在它到达finally块之前)将立即选择它进行收集.

在相关的说明中,请参阅Lippert的施工破坏.

  • +1链接到Eric Lippert的文章.重要的是要知道C#中"范围"的概念与花括号的嵌套很少或没有关系. (2认同)