Как данные хранятся
В основном массив является блоб данных. Целые значения представляют собой типы значений 32-разрядных целых чисел.
Идентификаторы в C# являются либо указателями на объекты, либо действительными значениями. В случае ссылочных типов они являются реальными указателями, в случае типов значений (например, int, float и т. Д.) Они являются фактическими данными. int
- тип значения, int[]
(массив целым числам) является ссылочным типом.
Причина, по которой это работает, в основном «эффективность»: накладные расходы на копирование 4 байта или 8 байтов для типа значения очень малы, а накладные расходы на копирование всего массива могут быть довольно обширными.
Если у вас есть массив, содержащий N целых чисел, это не более чем пятно N * 4 байта, с переменной, указывающей на первый элемент. Для каждого элемента в блоке нет имени.
т.д .:
int[] foo = new int[10]; // allocates 40 bytes, naming the whole thing 'foo'
int f = foo[2]; // allocates variable 'f', copies the value of 'foo[2]' into 'f'.
Доступ к данным
Что касается Еогеасп ... В C#, все коллекции реализовать интерфейс с именем IEnumerable<T>
. Если вы его используете, компилятор в этом случае заметит, что это целочисленный массив, и он будет циклически перемещаться по всем элементам. Другими словами:
foreach (int f in foo) // copy value foo[0] into f, then foo[1] into f, etc
{
// code
}
является (в случае массивов!) Точно такие же вещи, как:
for (int i=0; i<foo.Length; ++i)
{
int f = foo[i];
// code
}
Обратите внимание, что я явно надевание «в случае массивов» здесь. Массивы являются исключительным случаем для компилятора C#. Если вы не работаете с массивами (но f.ex. с List
, Dictionary
или чем-то более сложным), это работает по-другому, а именно с помощью Enumerator
и IDisposable
. Обратите внимание, что это просто оптимизация компилятора, массивы отлично справляются с управлением IEnumerable
.
Для тех, кто заинтересован, в основном это будет генерировать это для не-массивов и не являющихся строками:
var e = myEnumerable.GetEnumerator();
try
{
while (e.MoveNext())
{
var f = e.Current;
// code
}
}
finally
{
IDisposable d = e as IDisposable;
if (d != null)
{
d.Dispose();
}
}
Если вы хотите имя
Вы, вероятно, нужно Dictionary
.
Ваш вопрос немного неясен; можете ли вы попытаться его повторить? Между заголовком вопроса и двумя фрагментами кода, которые вы предоставляете, похоже, не очень много. Например, как «int value = object.property» относится к вопросу или к большому фрагменту кода? Является ли ваш вопрос о внутренних деталях и деталях реализации массива в C#, или вам интересно узнать о конструкции языка цикла foreach? –
У вас есть JavaScript-фона? – usr
Это не имеет доступа к каким-либо свойствам, но просто выполняет итерацию над 'IEnumerable' (интерфейс, который реализует массивы) и обращается к каждому элементу этого процесса с использованием цикла foreach [MSDN] [https://msdn.microsoft.com/de -at/library/ttw7t8t6.aspx] –
derpirscher