14

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

4 に答える 4

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

ここでは、文字列配列内の文字列とはまったく関係のない新しい文字列を作成しています。古い文字列を変更していません (できません。文字列は不変です)。次に、この新しい長い文字列を床にドロップするだけです-配列などを更新していません.

代わりに次のようなものを試してください:

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

これにより、配列内のすべての項目が新しい文字列に置き換えられます。反復中にリスト/コレクション/配列などを更新できないことに注意してください。これforeachにより、反復子が壊れる可能性があります。したがって、for代わりにループします。

于 2013-05-12T21:25:13.980 に答える
11

Chris が言ったこととは別に、LINQ を使用して目的を達成することができます。

string[] newStringArray = stringArray
    .Select(s => s + "sad")
    .ToArray();
于 2013-05-12T21:26:19.957 に答える
3
string b = s + "sad";

Console.WriteLine(s);

//Console.WriteLine(stringArray);

コードのどの時点でも、配列内の値を変更しません。string配列内の各値から新しい を作成し、string と連結します"sad"

解決

for-each変数を変更することはできません。次のようなメッセージが表示されます。

's' は 'foreach 反復変数' であるため、代入できません。

代わりに、単純なforループで解決してください。

for(int x = 0; x < stringArray.length; x++)
{
     stringArray[x] = stringArray[x] + "sad";
}
于 2013-05-12T21:23:11.907 に答える
0

コードの次の部分を見てください。

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

s文字列を文字列と連結"sad"し、変数に格納していますb。次に、変数の内容を表示しますs。変数bisnteadの内容を表示するとsad、各文字列の末尾に a が表示されます。

于 2013-05-12T21:24:50.897 に答える