在C#中使用'foreach'循环遍历字符串数组

15

我正在编写一个程序,该程序应该使用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);
            }
        }
    }
}

你应该将字符串 b = s + "sad"; 改为字符串 s += "sad"; - Kirill Bestemyanov
可能是打错了 Console.WriteLine(b); 而不是 Console.WriteLine(s); - Emre
4个回答

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

在这里,您正在创建一个与string-array中的字符串完全无关的新字符串。 您没有更改旧字符串(您无法更改; 字符串是不可变的)。 然后,您只需将此新的更长字符串放在一边 - 您没有更新数组等。

相反,请尝试类似于以下内容:

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

这个方法将使用新字符串替换数组中的每个元素。请注意,您不能在使用 foreach 迭代时更新列表/集合/数组等 - 否则会破坏迭代器。因此要使用 for 循环。


11

除了Chris说的之外,你可以简单地使用LINQ来实现你想要的:

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

3
string b = s + "sad";

Console.WriteLine(s);

//Console.WriteLine(stringArray);

您在代码中的任何时候都没有改变数组中的值。您会从数组中的每个值创建一个新的字符串,并将其与字符串“sad”连接起来。

解决方案

您无法更改for-each变量。您将收到以下消息:

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

相反,使用简单的for循环。

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

0

看一下代码的这部分:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接