2013-05-12 38 views
8

我正在寫一個應該顯示foreach循環中的數組中的項目的程序。在C中使用'foreach'循環與stringArray#

我想通過給每個元素添加一個字符串「sad」來改變數組的元素,但是當運行程序時數組保持不變。

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] stringArray = {"hey", "Tom"}; 

      for (int i = 0; i < stringArray.Length; i++) 
      { 
       stringArray[i] += " dad"; 
       Console.WriteLine(stringArray[i]); 
      } 

      Array.Resize(ref stringArray, stringArray.Length + 1); 

      // Add bob to the last element of the array 
      stringArray[stringArray.Length - 1] =" bob"; 

      foreach (string s in stringArray) 
      { 
       string b = s + "sad"; 
       Console.WriteLine(s); 
       //Console.WriteLine(stringArray); 
      } 
     } 
    } 
} 
+0

您應該更改字符串B = S +「傷心」;以字符串s + =「悲傷」; – 2013-05-12 21:25:18

+0

可能的錯字'Console.WriteLine(b);'而不是'Console.WriteLine(s);' – Emre 2013-05-12 21:28:53

回答

3
string b = s + "sad"; 

Console.WriteLine(s); 

//Console.WriteLine(stringArray); 

在你的代碼中沒有點你改變數組中的值。您可以從數組中的每個值創建一個新的string,並與字符串"sad"連接。

解決方案

你不能改變一個for-each變量。你會得到如下消息:

由於是'foreach迭代變量',因此無法賦值爲's'。

取而代之,解決簡單的for循環。

for(int x = 0; x < stringArray.length; x++) 
{ 
    stringArray[x] = stringArray[x] + "sad"; 
} 
0

看的這部分代碼:

string b = s + "sad"; 
Console.WriteLine(s); 

您與字符串"sad"串聯在s串,並在可變b存儲。然後顯示變量s的內容。如果您要顯示變量b的內容不變,則每個字符串末尾會有一個sad

+0

好的,謝謝你們,我明白了! – user2371290 2013-05-13 01:57:10

5
 foreach (string s in stringArray) 
     { 
      string b = s + "sad"; 
      // ... 
     } 

這裏是創建一個新的字符串,它與字符串數組中的字符串完全無關。你還沒有改變舊的字符串(你不能;字符串是不可改變的)。然後,您只需滴在地板上這個新的較長的字符串 - 你沒有更新的陣列等

嘗試,而不是像這樣:

for(int i = 0 ; i < stringArray.Length ; i++) 
{ 
    stringArray[i] = stringArray[i] + "sad"; 
} 

取代每一個項目的陣列,使新的字符串。請注意,在迭代foreach時,您無法更新列表/集合/數組等,這會破壞迭代器。因此改爲for循環。

7

除了什麼克里斯說,你可以簡單地使用LINQ來實現你想要的:

string[] newStringArray = stringArray 
    .Select(s => s + "sad") 
    .ToArray();