JSW*_*ork 7 .net c# garbage-collection
我在几个地方看到了具有以下逻辑的代码:
public void func()
{
_myDictonary["foo"] = null;
_myDictionary.Remove("foo");
}
Run Code Online (Sandbox Code Playgroud)
在删除之前将字典中的foo设置为null有什么意义?
我认为垃圾收集关心指向*foo最初的东西的数量.如果是这种情况,不将myDictonary ["foo"]设置为null只是将计数减少一个?一旦myDictonary.Remove("foo")被调用,会不会发生同样的事情?
_myDictonary ["foo"] = null是什么意思?
编辑:澄清 - 当我说"删除一个计数"时我的意思如下:
- myDictonary ["foo"]最初指向一个对象.这意味着该对象有一个或多个引用它的东西.
- 一旦myDictonary ["foo"]设置为null,它就不再引用所述对象.这意味着对象少引用它.
Guf*_*ffa 13
没有任何意义.
如果你看一下该Remove方法的作用(使用.NET Reflector),你会发现:
this.entries[i].value = default(TValue);
Run Code Online (Sandbox Code Playgroud)
该行将字典项的值设置为null,因为引用类型的默认值为null.因此,当Remove方法将引用设置为null时,在调用方法之前没有必要这样做.