Как очистить список в C #?


109

Я хочу очистить список. Как это сделать?


34
Время отклика здесь быстрее, чем при чтении / поиске в MSDN
— V4Vendetta

27
К тому же ответ теперь легче найти здесь, чем в MSDN.
— Мэтт Коннолли

14
Не говоря уже о том, что если вы гуглите .net empty list, эта страница появляется раньше MSDN!
— Вивиан Ривер

2
@ V4Vendetta В 2018 году я бы посоветовал StackOverflow, вероятно, создать бота, который помещает ваш комментарий в любую ветку, в которой есть ссылка на документ MSDN в комментариях ...
— scharette

Ответы:


234

Это действительно просто:

myList.Clear();

3
... если список на самом деле является List<>, ArrayListили орудие IList. ;)
— Lucero

3
@Lucero, это может быть список, если это не так?
— Шринивас Редди Татипарти

16
Поскольку это лучший хит в Google, и я столкнулся с этой проблемой, я некро комментирую это. Если вы используете тот же список в цикле и используете clear, список часто будет содержать ссылку на старые объекты - я часто заканчиваю тем, что использую = new LisT <T> (); из-за того, что он мгновенно очищает все старые выделения. Однако для большинства людей .Clear (); будет достаточно, но если вы обнаружите, что список ведет себя странно - попробуйте использовать = new List <T> () ;.
— Чарльз

1
Я собираюсь дважды прокомментировать это, потому что с 2020 года здесь была предоставлена ​​некоторая дезинформация. List<T>.ClearПравильно очищаются все ссылки, что позволяет GC очищать аллоки при необходимости. new List<T>НЕ делает этого и не подходит практически для всех сценариев
— Иоанна

28

Если под "списком" вы подразумеваете a List<T>, то вам нужен метод Clear :

List<string> list = ...;
...
list.Clear();

Вы должны выработать привычку искать эти вещи в документации MSDN.

Вот как быстро найти документацию по разным частям этого типа:

  • List Class - предоставляет сам List<T>класс ( это то, с чего вы должны были начать )
  • List.Clear Method - предоставляет документацию по методу Clear
  • Свойство List.Count - предоставляет документацию по свойству Count.

Все эти запросы Google содержат набор ссылок, но обычно вам нужна первая из них, которую Google дает вам в каждом случае.


«Все они содержат набор ссылок, но обычно вам нужна первая». Если вы не хотите очистить список?
— CVn

Извините, я должен был быть более ясным. Обычно вам нужна первая ссылка, которую дает вам Google, а не «Класс списка».
— Лассе В. Карлсен

9

Чтобы дать альтернативный ответ (Кому нужны 5 одинаковых ответов?):

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

Имейте в виду, что все остальные ссылки на старый список не были удалены (в зависимости от ситуации это может быть то, что вам нужно). Кроме того, с точки зрения производительности он обычно немного медленнее.


Можете ли вы убедиться, что параметр list = new List <> () на самом деле медленнее, чем list.Clear () ;? Согласно MSDN (ссылка ниже) list.Clear (); - это операция O (N), и я не могу представить, чтобы создание нового списка заняло бы больше времени. msdn.microsoft.com/en-us/library/dwb5h52a(v=vs.110).aspx
— Крис

5
DotNetPerls провел тест и обнаружил, что новый List <> работает быстрее. dotnetperls.com/list-clear
— Герхард Пауэлл

Также помните, что listесть новая ссылка. Так что не используйте это, если вы используете блокировку в этом списке.
— jeromej

9

Вариант №1: используйте функцию Clear (), чтобы очистить List<T>и сохранить емкость.

  • Count установлен в 0, и ссылки на другие объекты из элементов коллекции также освобождаются.

  • Емкость осталась без изменений.

Вариант №2 - Используйте функции Clear () и TrimExcess () для установки List<T>в исходное состояние.

  • Count установлен в 0, и ссылки на другие объекты из элементов коллекции также освобождаются.

  • Обрезка пустого значения List<T>устанавливает емкость списка до емкости по умолчанию.

Определения

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);

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);


5

Вы можете использовать чистый метод

List<string> test = new List<string>();
test.Clear();

4

Вам понадобится функция Clear () в списке, вот так.

List<object> myList = new List<object>();

myList.Add(new object()); // Add something to the list

myList.Clear() // Our list is now empty
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.