2016-06-29 44 views
1

學習一些基礎知識..我試圖將一個數組的元素複製到另一個。假設我不知道數組'bar'的大小。所以,我創建了一個空數組'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中。

在你的代碼中的例子中,你的數組由string [] 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

如果你打算使用數組,你會想創建第二個數組作爲th與第一個相同的尺寸。

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

如果您事先知道您的數組將是兩個,那麼您可以將它創建爲兩個大小。否則,您將需要檢查您正在複製的陣列的大小。如果您知道要添加和/或刪除項目,則需要使用其他集合。

+0

雖然我很欣賞其他的努力,但我相信這是更直接的,並且以相同的問題思考。謝謝! – AKrishna

相關問題