Другая ситуация, еще не упомянутая, - это когда у одного будет большое количество элементов, каждый из которых состоит из фиксированного набора связанных, но независимых переменных, слипшихся воедино (например, координаты точки или вершины трехмерного объекта). треугольник). Массив структур с открытым полем позволит эффективно модифицировать его элементы «на месте», что невозможно при использовании любого другого типа коллекции. Поскольку массив структур хранит свои элементы последовательно в ОЗУ, последовательный доступ к элементам массива может быть очень быстрым. В ситуациях, когда код должен будет выполнить много последовательных проходов через массив, массив структур может превзойти массив или другую коллекцию ссылок на объекты класса в 2: 1; кроме того, возможность обновления элементов на месте может позволить массиву структур превзойти любой другой вид совокупности структур.
Несмотря на то, что размеры массивов не изменяются, нетрудно заставить код хранить ссылку на массив вместе с количеством используемых элементов, и при необходимости заменить массив более крупным. В качестве альтернативы можно легко написать код для типа, который ведет себя очень похоже на List<T>
, но предоставляет доступ к его резервному хранилищу, позволяя, таким образом, сказать либо MyPoints.Add(nextPoint);
, либо MyPoints.Items[23].X += 5;
. Обратите внимание, что последний не обязательно вызовет исключение, если код попытается получить доступ за пределами списка, но в противном случае использование будет концептуально очень похоже на List<T>
.