2013-05-12 74 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();