Массив в C # - это просто блок непрерывной памяти, как и любой другой язык.По умолчанию взятие элемента по индексу в T[]
будет стоить нам O (1) из-за вычисления index * sizeof(T)
.Но это будет работать, только если мы знаем sizeof(T)
.
Так что я попытался сломать его:
var sampleArray = new string[10];
sampleArray[0] = "1";
sampleArray[1] = "2";
var objectArray = (object[]) sampleArray;
objectArray[2] = 42;
И, как и ожидалось, получил время выполнения System.ArrayTypeMismatchException
.
Хорошо,но сегодня я нашел этот пример:
var arr = new[] { new object[] { new[] { 1 }, 2, "3" } };
var someValue = arr[0][1];
И этот пример скомпилирован и запущен без каких-либо исключений.
Почему?
Как массив объектов знает размер любого элементаесли элементы разные?
Как это работает для строк различной длины на низком уровне?
Я не думаю, что Array
хранит мета-информацию для каждого элемента ...А может я ошибся?