2016-06-29 3 views
1

Изучение некоторых основ .. Я пытаюсь скопировать элементы массива в другой. Скажем, я не знаю размер массива «бар». Итак, я создаю пустой массив «arr», чтобы скопировать элементы, в которые нужно вставить. Код ниже не работает.C# - копирование элементов одного массива в другой - ошибка компиляции

Это работает, если я заменю

string[] arr ={} to string[] arr ={"",""} 

Как объявить пустой массив, и что нужно изменить в своем коде, чтобы достичь своей цели?

Спасибо!

//code 

string[] bar = {"test", "user"}; 
string[] arr = {}; 



//iterate from the first to the last element of array bar 
for (int i =0;i<bar.Length-1;i++) 

{ 

    Console.WriteLine("copy"); 

    //copy string from bar to arr 
    arr[i]= bar[i]; 

    //display the copied content from new array 
    Console.WriteLine(arr[i]); 


} 

ответ

0

К string[] arr = {}; вы инстанцированию пустого массива нулевой длины, таким образом, вам нужно определить его как string[] arr = string[bar.Length];.

UPD: Ваш код работал с string[] arr = {"",""}, потому что в этом случае вы определили массив длиной 2 с помощью двух пустых строк, но это код запах.

0

Массивы фиксированы по размеру, поэтому такие вещи, как Списки, предпочтительнее их.

В случае, если вы изменили определение массива на: string [] arr = {"", ""}, вы определяете массив размером 2, так же как ваш исходный массив. Когда вы пытаетесь его скопировать, у компилятора уже есть все выделенное и готовое к работе, поэтому он знает, где позиция 0 и позиция 1 находятся в массиве arr.

В примере в вашем коде, где у вас есть массив, определенный строкой [] arr = {}; вы даете ему пустой массив (размер массива 0). У компилятора есть проблема, потому что он не может ссылаться на позицию 0 или позицию 1 на пустой массив.

2

в C#, массивы имеют фиксированный размер. Поэтому, когда вы создаете свой массив с размером 0, вы не можете изменить количество элементов, которые он будет содержать, без повторного создания его.

Если вы хотите использовать коллекцию вы можете активно добавлять/удалять из (как очень часто), рассмотреть вопрос об использовании List<T>:

string[] bar = {"test", "user"}; 
List<string> list = new List<string>(); 

for (int i =0;i<bar.Length-1;i++) 
{ 
    list.Add(bar[i]); 
    Console.WriteLine(list[i]); 
} 
+0

Зачем вам нужен список, если вы знаете, какой размер вашей коллекции будет? В случае OP это размер массива баров. – hazevich

+0

Когда все статично, как и в его тестовой программе, он может гарантировать, что он знает размер коллекции во время компиляции, поэтому вы правы. Я по-прежнему рекомендую познакомиться с коллекциями обобщенных на C#, поскольку они используются гораздо чаще и предлагают больше преимуществ. – Jonesopolis

+0

@Jonesopolis, даже если он не был статичным, у массивов есть свойство Length, которое сообщит вам размер. – dwbartz

0

Вы можете изменить строку как:

string[] arr = new string[4]; 

или

List<string> arr = new List<string>(); 
0

Если вы собираетесь использовать массивы, вы хотите, чтобы создать второй массив как го такой же размер, как и первый.

string[] bar = {"test", "user"}; 
string[] arr = new string[bar.Length]; 

Если вы знаете заранее, что ваш массив будет равен двум, тогда вы можете просто создать его как размер два. В противном случае вы захотите проверить размер массива, из которого вы копируете. Если вы знаете, что будете добавлять и/или удалять элементы, вы захотите использовать другую коллекцию.

+0

Несмотря на то, что я ценю другие усилия, я считаю, что это более прямое и мышление в тех же терминах вопроса. Благодаря! – AKrishna

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