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

有没有一种简单的方法可以在C#中更改字符串中的字符?,c#,string,char,C#,String,Char,我想这样做: string s = "abc"; s[1] = 'x'; s将成为“axc”。然而,字符串[i]似乎只有一个getter而没有setter。编译器给了我以下错误: “属性或索引器 无法分配“string.this[int]” 到--它是只读的“ 我想我可以做一个循环,改变我想要的字符。但我只是想知道是否有一个简单的方法可以做到这一点?为什么字符串[i]没有setter 提前感谢。字符串是不可变的,因此您必须创建一个char[]数组,对其进行更改,然后将其重新设置为字符串: st

我想这样做:

string s = "abc";
s[1] = 'x';
s将成为“axc”。然而,字符串[i]似乎只有一个getter而没有setter。编译器给了我以下错误:

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

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


提前感谢。

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

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

我不认为您可以在C#中这样做,因为字符串不能更改(只是销毁和重新创建)。看看这个类。

(您的示例有点错误:s[2]=“x”应该将其更改为“abx”。)

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

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


希望有帮助

字符串是不可变的,因此没有setter,但是可以使用字符串生成器:

StringBuilder s = new StringBuilder("abc");

s[1] = 'x';

请记住,在托管和安全的.Net中,字符串是不可变的,因此,即使您可以执行上述操作,您也确实需要创建一个带有替换项的字符串的新副本

如果您只替换一个角色,那么简单的循环可能是您的最佳选择

但是,如果要进行多次替换,请考虑使用<代码> StringBuilder < /代码>:

  string s = "abc";
  var stringBuilder = new StringBuilder(s);
  stringBuilder[1] = 'x';
  s = stringBuilder.ToString();
这是怎么回事

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”。
因为这将用新字符串替换旧字符串。

如果使用一些Linq,为什么不这样做

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

这应该可以让您用所需的字符替换所需的字符。

C#中的字符串是不可变的,因此您不能这样做。应该是stringBuilder[1]=“x”而不是stringBuilder[2]。这将返回abx.newString=originalString.Remove(index,1).Insert(index,charToReplace),但是如果字符串包含多个“b”,而您只想替换第一个,那么这将不起作用。