我正在编写一个程序,它应该在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);
}
}
}
}
答案 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
。