有没有一种简单的方法来在C#中更改字符串中的字符?

我想做这个:

string s = "abc"; s[1] = 'x'; 

并且s将成为“axc”。 但是,似乎string [i]只有一个getter并且没有setter。 编译器给我以下错误:

“属性或索引器’string.this [int]’无法分配给 – 它是只读的”

我想我可以制作一个循环并改变我想要的字符。 但我只是想知道是否有一个简单的方法来做到这一点? 为什么没有字符串[i]的setter?

提前致谢。

字符串是不可变的,因此您必须创建一个char[]数组,更改它,然后将其重新转换为字符串:

 string s = "foo"; char[] arr = s.ToCharArray(); arr[1] = 'x'; s = new string(arr); 

字符串是不可变的,这就是为什么没有setter,但是你可以使用字符串构建器:

 StringBuilder s = new StringBuilder("abc"); s[1] = 'x'; 

(你的例子有些错误:s [2] =’x’应该把它改成“abx”。)

不,你不能,因为字符串是不可变的,你必须创建一个新的字符串:

http://en.wikipedia.org/wiki/Immutable_object

您应该使用一个返回具有所需修改的新字符串的方法。

希望有所帮助!

请记住,在托管和安全的.Net中,字符串是不可变的,因此即使您可以执行上述操作,您也可以使用替换创建字符串的新副本。

如果你只是替换一个角色,一个简单的循环可能是你最好的选择。

但是,如果要进行多次替换,请考虑使用StringBuilder

  string s = "abc"; var stringBuilder = new StringBuilder(s); stringBuilder[1] = 'x'; s = stringBuilder.ToString(); 

我认为你不能在C#中做到这一点,因为字符串不能被改变(只是被破坏和重新创建)。 看看StringBuilder类。

如果您使用的是Linq,为什么不这样做呢

 private string ConvertStr(string inStr , int inIndex , char inChar) { char[] tmp = inStr.ToCharArray(); tmp.SetValue(inChar , inIndex); return new string(tmp); } 

这应该让你用你想要的任何字符替换你想要的任何字符。

这有什么关系?

 string originalString = "abc"; var index = 1; char charToReplace = 'x'; var newString = string.Format("{0}{1}{2}", originalString.Substring(0, index), charToReplace, originalString.Substring(index + 1)); 

是的,在c#字符串中无法更改。

但我们可以试试这个

 string s = "abc"; s = s.Replace('b', 'x'); Console.WriteLine(s); 

答案将是“axc”。 因为这将用新字符串替换旧字符串。