2011-05-13 50 views
4

我有像下面如何改變字符串的第n個元素

string s = new string('~',25); 
int ind = 5; 
s[ind] = 'A'; 

它給出了一個錯誤

屬性或索引「string.this [INT]」不能被分配在C#代碼它 - 它被讀取

那麼是什麼問題,我該如何解決它。

+1

字符串在C#中不變的,所以你需要使用StringBuilder – 2011-05-13 09:51:06

回答

10

字符串是不可變的 - 你不能改變現有的字符串。

兩個選項:

  • 使用StringBuilder,例如

    StringBuilder builder = new StringBuilder(new string('~', 25)); 
    builder[5] = 'A'; 
    string result = builder.ToString(); 
    
  • 構建從字符數組一個新的字符串:

    char[] chars = new string('~', 25).ToCharArray(); 
    chars[5] = 'A'; 
    string result = new string(chars); 
    

在這兩種情況下,你可以填充可變數據,而無需建立一個新的字符串開始,如果你想 - 這將涉及更多的代碼,但可能會更有效。

或者,你可以把子串和連接在一起,按照另一個答案......基本上有很多方法來解決這個問題。哪一個是合適的取決於你的實際使用情況。

1

MSDN

字符串是不可變 - 一個String對象的內容可以雖然語法使它看起來好像你能做到這一點不能創建對象後改變。

請看StringBuilder類或使用char數組來代替。

0

C#字符串是不可變的,這意味着一旦構造就不能改變。嘗試使用一個字符數組來代替。

0

嘗試

s = s.Substring(0, ind) + "A" + s.Substring(ind + 1); 
0

您可以使用StringBuilder,您可以在其中分配給索引:

StringBuilder sb = s; 
int ind = 5; 
sb[ind] = 'A'; 
s = sb.ToString(); 
相關問題