Этот вопрос уже имеет ответ здесь:
я в основном хочу знать различия или преимущества в использовании универсального списка вместо массива в ниже упомянутого сценария
class Employee
{
private string _empName;
public string EmpName
{
get{ return _empName; }
set{ _empName = value; }
}
}
1. Employee[] emp
2. List emp
кто-либо может сказать мне преимущества или недостатки и который предпочесть?
Вам необходимо знать размер массива на момент его создания, но вы не можете изменить его размер после того, как он был создан.
Таким образом, он использует динамическое выделение памяти для массива во время создания. (Это отличается от статического распределения памяти, используемого для массивов C ++, где размер должен быть известен во время компиляции.)
Список может динамически расти ПОСЛЕ того, как он был создан, и он имеет .Add ()
для этого.
Какой из них предпочесть? Список
.
Если вы знаете, количество элементов массива - хороший выбор. Если нет, воспользуйтесь списком. Внутри List
использует массив T, поэтому они на самом деле больше похожи, чем вы думаете.
При использовании списка вам не нужно заранее знать размер массива. Вы можете динамически добавлять новых сотрудников в зависимости от потребностей вашей реализации.
Самая большая разница в том, что массивы нельзя делать длиннее или короче после их создания. Однако экземпляры списка могут содержать добавленные или удаленные элементы. Есть и другие различия (например, доступны разные наборы методов), но добавление / удаление - это большая разница.
Мне нравится List, если нет действительно веской причины использовать Array, так как гибкость List хороша, а штраф за производительность очень мал по сравнению со стоимостью большинства других вещей, которые обычно делает ваш код.
Если вы хотите погрузиться во многие интересные технические подробности, ознакомьтесь с этой веткой StackOverflow , в которой подробно рассказывается о List vs.Задайте более подробный вопрос.
С помощью общего списка вы можете дешево Добавить
/ Удалить
и т. Д. (По крайней мере, на дальнем конце). Изменение размера массива (добавление / удаление) дороже. Очевидным недостатком является то, что у списка есть свободная емкость, поэтому, возможно, несколько байтов тратятся впустую - хотя в большинстве случаев не стоит беспокоиться (и вы можете обрезать его).
Как правило, предпочитайте списки, если вы не знаете , что ваши данные никогда не меняют размер.
С точки зрения API, поскольку LINQ практически не имеет выбора между ними (т.е. дополнительные методы в List
в значительной степени дублируются LINQ, поэтому массивы получают их бесплатно).
Еще одно преимущество состоит в том, что со списком вам не нужно открывать сеттер:
private readonly List<Foo> items = new List<Foo>();
public List<Foo> Items { get { return items; } }
устраняет диапазон ошибок null
и позволяет вам сохранять контроль над данными (особенно если вы используете другая реализация IList <>
, которая поддерживает проверку / проверку при изменении содержимого).
Если вы открываете коллекцию в общедоступном интерфейсе, в рекомендациях .NET Framework рекомендуется использовать список, а не T []. (Фактически, BindingList
Внутренне массив может быть более подходящим, если у вас есть коллекция фиксированного известного размера. Изменение размера массива дорого по сравнению с добавлением элемента в конец списка.
Одно большое отличие состоит в том, что List
может быть расширен (вы можете позвонить Добавить) или по контракту (для него можно вызвать Remove), тогда как Employee [] имеет фиксированный размер. Таким образом, с Сотрудником []
труднее работать, если этого не требует необходимость.