列表清除是否删除以前包含的对象

本文关键字:包含 对象 清除 是否 删除 列表 | 更新日期: 2023-09-27 18:28:57

想象我有:

List<MyObject> MyList = new List<MyObject>();
MyObject obj1 = new MyObject();
MyObject obj2 = new MyObject();
MyList.Add(obj1);
MyList.Add(obj2);

做一个

MyList.Clear();

删除实例化:"obj1","obj2"?还是它们保存在内存中,但列表现在为空?

列表清除是否删除以前包含的对象

只要

您有一个对对象的引用并且可以在代码中访问它,它就在内存中,垃圾回收器不会收集它。 所以答案是否定的,它们保存在内存中

您可以在此处阅读有关垃圾回收的更多信息。

如果代码是这样的

List<MyObject> MyList = new List<MyObject>();
MyList.Add(new MyObject());
MyList.Add(new MyObject());

然后,当您调用MyList.Clear()时,您没有对创建的MyObject的引用,因此垃圾回收器将收集它们并在下次运行时从内存中删除它们。如果要在清除列表后从内存中删除obj1obj2,则应使用

obj1 = null;
obj2 = null;
GC.Collect()

但请注意强制垃圾回收的后果。

删除实例化:"obj1","obj2"?还是它们保存在内存中,但列表现在为空?

它们

将保留在内存中,直到没有对对象的引用并且 GC 会删除它们。在这种情况下,只有您的列表将为空。您可以通过在调用该方法后尝试访问对象的成员来轻松测试Clear这一点。

clear函数只是清除列表。 obj1obj2不会null.您可以通过打印对象轻松检查它:

Console.WriteLine(obj1);