2

如果变量在当前范围内是本地的,是否有任何理由在它结束之前将它们设置为 null ?

{
    var com = new AComponentObjectModelInterface();

    // something goes here
    // ...

    com = null; // why?
}
4

5 回答 5

3

简短的回答,不,不在 C# 中

这通常是开发人员使用 VB6 等其他语言的习惯

于 2012-02-03T10:43:18.927 回答
2

将变量设置为 null 不会处理它引用的对象。事实上,它可能会通过扩展变量的范围来阻碍垃圾收集。

于 2012-02-03T10:43:13.793 回答
1

简短回答:在您的特定情况下,没有任何理由。这些程序员很可能来自一种有意义的不同语言。

于 2012-02-03T10:43:42.430 回答
1

有时防止多个Dispose相同的对象很有用。假设您有一个Close方法可以对您的班级进行一些清理。通过将对象设置为null,您将确保多次调用Close不会尝试多次:DisposeDisposableMember

public void Close()
{
    if (DisposableMember != null)
    {
        DisposableMember.Dispose();
        DisposableMember = null;
    }
}

但请记住,它本身不会释放/处置任何东西。

于 2012-02-03T10:46:13.683 回答
1

也许使用它的开发人员正在手动迁移 VB6 代码。但他忽略了这一点

Set aComponentObjectModelInstance = new AComponentObjectModelInterface

// something goes here
// ...

Set aComponentObjectModelInstance = Nothing

应该翻译成

var aComponentObjectModelInstance = new AComponentObjectModelInterface();
try 
{
    // something goes here
    // ...
}
finally
{
    Marshal.ReleaseComObject(aComponentObjectModelInstance);
}

反而

于 2012-02-03T10:56:14.987 回答