Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否清除列表以删除以前包含的对象_C#_.net_List - Fatal编程技术网

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

C# 是否清除列表以删除以前包含的对象,c#,.net,list,C#,.net,List,想象一下我有: List<MyObject> MyList = new List<MyObject>(); MyObject obj1 = new MyObject(); MyObject obj2 = new MyObject(); MyList.Add(obj1); MyList.Add(obj2); 是否删除实例化的“obj1”、“obj2”?或者它们保存在内存中,但列表现在是空的?清除功能只需清除列表即可。 obj1和obj2将不为null。 您可以通过打印以下

想象一下我有:

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

是否删除实例化的“obj1”、“obj2”?或者它们保存在内存中,但列表现在是空的?

清除功能只需清除列表即可。
obj1
obj2
将不为
null
。 您可以通过打印以下对象轻松进行检查:

Console.WriteLine(obj1);
是否删除实例化的“obj1”、“obj2”?或者它们被保存在内存中,但列表现在是空的


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

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

您可以阅读有关垃圾收集的更多信息

如果代码是这样的

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

但是要注意强制垃圾收集的后果。

对象仍然处于活动状态,但列表为空。垃圾收集器(GC)一旦不再引用对象,就会将其删除。我相信这不是java
List<MyObject> MyList = new List<MyObject>();
MyList.Add(new MyObject());
MyList.Add(new MyObject());
obj1 = null;
obj2 = null;
GC.Collect()