如何清空C#中的列表?

oli*_*ive 95 .net c#

我想清空一个清单.怎么做?

Øyv*_*hen 209

这真的很容易:

myList.Clear();
Run Code Online (Sandbox Code Playgroud)

  • 由于这是谷歌的热门话题,我遇到了这个问题,我正在评论这个问题.如果在循环中使用相同的列表并使用clear,则列表通常会引用旧对象 - 我经常最终使用= new LisT <T>(); 由于它立即清除所有旧的分配.对于大多数人来说,.Clear(); 将足够,但如果你发现一个奇怪的行为 - 尝试使用= new List <T>();. (13认同)
  • 我将对此进行双重注释,因为截至 2020 年,此处已提供了一些错误信息。`List&lt;T&gt;.Clear` 正确清除了所有引用,这允许 GC 在必要时清除分配。`new List&lt;T&gt;` 不会执行此操作,并且实际上不适合所有场景 (5认同)
  • ...如果列表实际上是`List <>`,`ArrayList`,或实现`IList`.;) (3认同)
  • @Lucero是否会被称为列表,如果它不是那些? (3认同)

ang*_*son 27

如果用"list"表示a List<T>,那么Clear方法就是你想要的:

List<string> list = ...;
...
list.Clear();
Run Code Online (Sandbox Code Playgroud)

你应该养成在这些东西上搜索MSDN文档的习惯.

以下是如何快速搜索该类型的各种位的文档:

所有这些Google查询都列出了一系列链接,但通常您需要谷歌在每种情况下提供的第一个链接.


Mei*_*bur 9

给出一个替代答案(谁需要5个相同的答案?):

list.Add(5); 
// list contains at least one element now
list = new List<int>();
// list in "list" is empty now
Run Code Online (Sandbox Code Playgroud)

请记住,旧列表的所有其他引用尚未清除(根据具体情况,这可能是您想要的).此外,在性能方面,它通常有点慢.

  • DotNetPerls做了一个基准测试,发现新的List <>更快.http://www.dotnetperls.com/list-clear (4认同)
  • @GerhardPowell根据您提供的文章,与使用“Clear()”方法相比,创建新的 List&lt;&gt; 不再更快。“结果显示,在列表上调用 Clear() 速度更快。” (2认同)

Wor*_*ter 9

选项#1:使用Clear()函数清空List<T>并保留其容量.

  • Count设置为0,并且还会释放对集合元素中其他对象的引用.

  • 容量保持不变.

选项#2 - 使用Clear()TrimExcess()函数设置List<T>为初始状态.

  • Count设置为0,并且还会释放对集合元素中其他对象的引用.

  • 修剪为空List<T>将List的容量设置为默认容量.

定义

Count =实际中的元素数List<T>

容量 =内部数据结构在不调整大小的情况下可以容纳的元素总数.

仅清除()

List<string> dinosaurs = new List<string>();    
dinosaurs.Add("Compsognathus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Deinonychus");
Console.WriteLine("Count: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
dinosaurs.Clear();
Console.WriteLine("\nClear()");
Console.WriteLine("\nCount: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
Run Code Online (Sandbox Code Playgroud)

Clear()和TrimExcess()

List<string> dinosaurs = new List<string>();
dinosaurs.Add("Triceratops");
dinosaurs.Add("Stegosaurus");
Console.WriteLine("Count: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
dinosaurs.Clear();
dinosaurs.TrimExcess();
Console.WriteLine("\nClear() and TrimExcess()");
Console.WriteLine("\nCount: {0}", dinosaurs.Count);
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
Run Code Online (Sandbox Code Playgroud)


Kim*_*jan 5

你可以做到这一点

var list = new List<string>();
list.Clear();
Run Code Online (Sandbox Code Playgroud)


Swa*_*aff 5

您可以使用clear方法

List<string> test = new List<string>();
test.Clear();
Run Code Online (Sandbox Code Playgroud)