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;
答案 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