在C#中使用带字符串数组的'foreach'循环

时间:2013-05-12 21:20:00

标签: c# arrays

我正在编写一个程序,它应该在foreach循环中显示数组中的项目。

我想通过向每个元素添加字符串“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);
            }
        }
    }
}

4 个答案:

答案 0 :(得分:7)

除了克里斯所说的,你可以简单地使用LINQ实现你想要的目标:

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

答案 1 :(得分:6)

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

在这里,您要创建一个新字符串,与字符串数组中的字符串完全无关。您没有更改旧字符串(您不能;字符串是不可变的)。然后你只需将这个新的更长的字符串放在地板上 - 你没有更新数组等。

尝试改为:

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

使用新字符串替换数组中的每个项目。请注意,在使用foreach进行迭代时无法更新列表/集合/数组等 - 这可能会破坏迭代器。因此改为for循环。

答案 2 :(得分:3)

string b = s + "sad";

Console.WriteLine(s);

//Console.WriteLine(stringArray);

您的代码中没有任何内容可以更改数组中的值。您可以从数组中的每个值创建一个新的string,并与字符串"sad"连接。

解决方案

您无法更改for-each变量。你会得到一条消息:

  

无法分配给's',因为它是'foreach迭代变量'。

相反,请选择一个简单的for循环。

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

答案 3 :(得分:0)

看看代码的这一部分:

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

您将s中的字符串与字符串"sad"连接起来,并存储在变量b中。然后显示变量s的内容。如果您要显示变量b的内容,则每个字符串的末尾都会有sad