将对象引用设置为null

时间:2014-01-01 19:11:18

标签: c#

var list1 = new List<obj>();
var list2 = new List<obj>();
var item = new obj();
list1.Add(item);
list1.Add(item);

如果一个具有相同引用值的引用设置为null,c#中有一种方法可以将当前应用程序中的所有引用设置为null吗?

例如,当我执行list[0]=null or item=null时,我想在当前应用程序中将任何具有相同引用值的引用设置为null,以便GC处理它们,同时我不希望所有这一行为类型,c#中有这样的东西吗?

得到这个想法 如果我说

 list1[0] = null

我希望它同时意味着

list2[0] = null;
item = null; 

2 个答案:

答案 0 :(得分:2)

没有办法自动将其他变量设置为null,但如果您的目的是为了获取对象垃圾,即使您仍然有其他引用,您也可以这样做。

您需要使用弱引用。弱文献记录here

答案 1 :(得分:1)

您需要在内存引用中引入一个额外的间接层。最简单的方法是为类创建Nullable<T>类型:

public class Nullable<T> where T : class
{
    public T Value { get; set; }

    public Nullable(T initial)
    {
        this.Value = initial;
    }
}

然后您可以使用此类型来包装对象:

var list1 = new List<Nullable<object>>();
var list2 = new List<Nullable<object>>();
var item = new Nullable<object>(new object());
list1.Add(item);
list2.Add(item);
item.Value = null;    // clears value from all collections