Подтвердить что ты не робот

С# массив против общего списка

В основном я хочу знать различия или преимущества использования общего списка вместо массива в приведенном ниже сценарии

class Employee
{
    private string _empName;

    public string EmpName
    {
       get{ return _empName; }
       set{ _empName = value; }
    }
}

1. Employee[] emp 
2. List<Employee> emp

Может кто-нибудь, пожалуйста, скажите мне преимущества или недостатки и какой из них предпочтительнее?

4b9b3361

Ответ 1

Одно большое различие заключается в том, что List<Employee> можно развернуть (вы можете вызвать "Добавить на него" ) или сжиматься (вы можете вызвать "Удалить" ), тогда как Employee [] фиксирован по размеру. Таким образом, Employee[] работает более жестко, если только необходимость не требует его.

Ответ 2

Самое большое различие заключается в том, что массивы не могут быть сделаны длиннее или короче после их создания. Список экземпляров, однако, может содержать элементы, добавленные или удаленные. Существуют и другие различия (например, различные наборы доступных методов), но добавление/удаление - большая разница.

Мне нравится List, если у меня нет веской причины использовать Array, поскольку гибкость List хороша, а штраф в исполнении очень мал относительно стоимости большинства других вещей, которые обычно выполняет ваш код.

Если вы хотите погрузиться во множество интересных технических деталей, ознакомьтесь с fooobar.com/questions/10426/..., который углубляется в вопрос "Список по сравнению с массивом" более подробно.

Ответ 3

В общем списке вы можете Add/Remove и т.д. дешево (по крайней мере, в дальнем конце). Изменение размера массива (для добавления/удаления) является более дорогостоящим. Очевидным недостатком является то, что список имеет резервную емкость, поэтому может быть потрачено несколько байтов - в большинстве случаев это не стоит беспокоиться (и вы можете обрезать его).

Как правило, предпочитайте списки, если не знаете, что ваши данные никогда не меняют размер.

API-интерфейс, поскольку LINQ между ними мало что выбрать (т.е. дополнительные методы на List<T> в значительной степени дублируются LINQ, поэтому массивы получают их бесплатно).

Другим преимуществом является то, что с помощью списка вам не нужно выставлять сеттер:

private readonly List<Foo> items = new List<Foo>();
public List<Foo> Items { get { return items; } }

устраняет ряд ошибок null и позволяет вам контролировать данные (особенно если вы используете другую реализацию IList<>, которая поддерживает проверку/проверку при изменении содержимого).

Ответ 4

Вам нужно знать размер массива в момент его создания, но вы не можете изменить его размер после его создания.

Таким образом, он использует динамическое распределение памяти для массива во время создания. (Это отличается от статического распределения памяти, используемого для массивов С++, где размер должен быть известен во время компиляции.)

Список может динамически увеличиваться ПОСЛЕ того, как он был создан, и для этого есть функция .Add().

- из MSDN

Какой из них предпочтительнее? List<T>.

Ответ 5

Если вы публикуете коллекцию в открытом интерфейсе, в рекомендациях .NET Framework рекомендуется использовать List, а не T []. (Фактически, BindingList <T> )

Внутренне массив может быть более уместным, если у вас есть коллекция, которая является фиксированным, известным размером. Изменение размера массива дорого по сравнению с добавлением элемента в конец списка.

Ответ 6

Если вам известно, что количество элементов массива является хорошим выбором. Если вы не используете этот список. Internal List<T> использует массив T, поэтому они на самом деле больше похожи, чем вы думаете.

Ответ 7

Со списком вам не нужно заранее знать размер массива. Вы можете динамически добавлять новых сотрудников на основе потребностей вашей реализации.