2014-01-31 4 views
-3

Скажем, у меня есть массивы,Назначает ли непустой массив другому массиву очистить массив?

 string[] arr1 = { "Hi", "hello", "goodbye" }; 
     string[] arr2 = { "Stop", "making", "arrays", "please" }; 
     string[] arr3 = { "Simple", "Array"}; 

Согласно декларации выше arr1 инициализируется размером 3 arr2 до 4, и arr3 только 2. Теперь, когда arr1 инициализирован как массив с максимальным размером 3 , что произойдет, если я присвою ему другой массив?

  • Исходные значения очищены и заменены новым массивом?
  • Что делать, если второй массив меньше, являются ли значения только до меньшего массива, а старые значения сохранены?
  • Если это больше, я могу получить исключение IndexOutOfRange?
+1

Downvoters! Поскольку я не мог найти ответ на SO, я добавил вопрос. Это было опубликовано как Q & A. Я сам ответил на этот вопрос. – seebiscuit

ответ

0

Итак, я попробовал.

 foreach (var item in arr1) 
     { 
      Console.WriteLine("arr1:); 
      Console.WriteLine(" " + item); 
     } 

     arr1 = arr2; 
     foreach (var item in arr1) 
     { 
      Console.WriteLine("arr1 = arr2:); 
      Console.WriteLine(" " + item);    
     } 

     arr1 = arr3; 
     foreach (var item in arr1) 
     { 
      Console.WriteLine("arr1 = arr3:); 
      Console.WriteLine(" " + item); 
     } 

Выход

arr1: 
Hi 
hello 
goodbye 
arr1 = arr2: 
Stop 
making 
arrays 
please 
arr1 = arr3 
Simple 
array 

Итак, мы видим, что, когда один массив назначается другой, первый массив просто указывает на то же ссылки, как Assigner (если Assigner изменяется, назначенная изменяется одинаково, попробуйте).

1

Переменные - указатели на массивы. Путем назначения arr2 на arr1, arr1 и arr2 обе указывают на { "Stop", "making", "arrays", "please" }. Если вы назначили «тест» arr1[1], arr2[1] == "test". Исходный массив, присвоенный arr1, остался сиротой и будет собираться в определенный момент.

1

Три переменные в вашем коде - это просто ссылки на System.Array экземпляры в памяти. Присвоение переменной System.Array экземпляру переменной изменит эту ссылку. Исходный экземпляр System.Array будет отмечен для сбора мусора, если ни один другой объект не ссылается на него.

string[] arr1 = { "Hi", "hello", "goodbye" }; 
string[] arr2 = { "Stop", "making", "arrays", "please" }; 
string[] arr3 = { "Simple", "Array"}; 

arr1 = { "A", "new", "array" }; // The original "Hi", "hello", "goodbye" array will be marked for garbage collection; arr1 now references the new array 

Я рекомендую читать справочные типы и сбор мусора. Документация MSDN должна полностью объяснить эти понятия.

Смежные вопросы