2013-07-25 146 views
0

我正在做一個簡單的hang子手遊戲。除了用戶輸入正確字符的部分以外,我已經完成了所有工作,解決方案中的相應字符應替換爲前者。在位置x處替換字符串中的單個字符

首先,這裏是我的代碼:

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 

任何人都可以給我一個提示,我可以如何用猜測的字符替換解決方案中的字符?

回答

2

字符串是不可改變類,所以使用StringBuilder的代替

... 
     StringBuilder temp = new StringBuilder(lblWord.Text); 
     temp[i] = letter; // <- It is possible here 
     lblWord.Text = temp.ToString(); 
    ... 
+0

非常感謝,它的工作方式。有沒有任何理由爲什麼字符串是不可改變的? – LeonidasFett

+1

字符串不可變的一些原因是:線程安全性,積極的編譯器優化和內存保存(例如快速複製),副作用預防(例如字典) –

1

將字符串一個字符陣列String.ToCharArray()中,進行改變和將其轉換回用字符串「新的字符串(CHAR [])」

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); 
}