Например, в C # массивы имеют свойство Length. Но другие типы коллекций, такие как списки и т. Д., Имеют свойство Count. Есть ли причина, почему эти два разные? Если так, то я хотел бы знать.
Например, в C # массивы имеют свойство Length. Но другие типы коллекций, такие как списки и т. Д., Имеют свойство Count. Есть ли причина, почему эти два разные? Если так, то я хотел бы знать.
Ответы:
Они названы по-разному, потому что семантически они совершенно разные:
Количество коллекции - это количество элементов, хранящихся в ней в данный момент, которые могут со временем измениться.
Длина массива - это максимальное количество элементов, которые он может содержать (он будет иметь длину 10, даже если вы не сохранили в нем столько элементов) и является неизменным.
Пример:
Если у меня есть ведро, которое может вместить максимум 100 шаров, оно имеет длину 100. Если я положу в него 50 шаров, то у него будет количество 50.
Если я добавлю еще 10 шаров, счет станет 60, но длина все равно 100. Чтобы изменить длину, мне нужно получить другое ведро.
Массив, вероятно, использует слово Length, потому что под капотом он выделяет непрерывный блок (длину) памяти, основанный на емкости, умноженной на размер элемента. Хотя тот факт, что класс List использует «Capacity» для аналогичной (хотя и изменчивой) концепции, предполагает, что массив может использовать слово «Length» по историческим причинам.
T[]
с длиной N всегда хранит ровно N значений типа T
. Семантически, не все эти значения могут быть значимыми (они могут быть, null
например), но они существуют. Это отличается от обычного значения емкости (как, List<T>
например, используется). Ты прав, что Count
можешь измениться, а Length
не можешь. Опять же, ничто не обязывает, что Count
на самом деле изменится. Это также используется для неизменных коллекций.
count
-property.