0

私は簡単なハングマンゲームをやっています。ユーザーが正しい文字を入力する部分を除いて、すべてがうまくいきました。解決策の単語の対応する文字を前者に置き換える必要があります。

まず、ここに私のコードがあります:

private void checkIfLetterIsInWord(char letter)
{
    if (currentWord != string.Empty)
    {
        if (this.currentWord.Contains(letter))
        {
            List<int> indices = new List<int>();
            for (int x = 0; x < currentWord.Length; x++)
            {
                if (currentWord[x] == letter)
                {
                    indices.Add(x);
                }
            }
            this.enteredRightLetter(letter, indices);
        }
        else
        {
            this.enteredWrongLetter();
        }
    }
}


private void enteredRightLetter(char letter, List<int> indices)
{
    foreach (int i in indices)
    {
        string temp = lblWord.Text;
        temp[i] = letter;
        lblWord.Text = temp;

    }
}

だから私の問題はラインです

temp[i] = letter;

ここで、「プロパティまたはインデクサーを割り当てることができません - 読み取り専用です」というエラーが表示されます。私はすでにグーグルで調べたところ、実行時に文字列を変更できないことがわかりました。しかし、推測を含むラベルを置き換える方法がわかりません。ラベルの形式は

_ _ _ _ _ _ _ //single char + space

解決策の単語の文字を推測された文字に置き換える方法を誰かに教えてもらえますか?

4

3 に答える 3

2

解決策は良いですが、StringBuilderやり過ぎだと思います。代わりに でこれを行うことができますtoCharArray()。また、ループが終了するまでラベルを更新する必要はありません。

private void enteredRightLetter(char letter, List<int> indices)
{
   char[] temp = lblWord.Text.ToCharArray();
   foreach (int i in indices)
   {
      temp[i] = letter;
   }
   lblWord.Text= new string(temp);
}
于 2013-07-25T13:57:10.387 に答える
2

String は不変クラスであるため、代わりにStringBuilderを使用します。

  ...
      StringBuilder temp = new StringBuilder(lblWord.Text);
      temp[i] = letter; // <- It is possible here
      lblWord.Text = temp.ToString();  
  ...
于 2013-07-25T13:51:40.913 に答える
1

String.ToCharArray() で文字列を文字配列に変換し、変更を加えてから "new String(char[])" で文字列に戻します。

于 2013-07-25T13:48:01.050 に答える