我可以看到你有一个字符串:
string s = "abc";
我希望将第二个字符更改为'd',使其变为"adc"。我认为以下代码可以实现:
s[1] = 'd';
然而,我遇到了一个错误:
Property or indexer 'string.this[int] 'cannot be assigned to -- it is read only
我该如何完成这个简单的任务(不使用相对复杂的子字符串方法)?
我可以看到你有一个字符串:
string s = "abc";
我希望将第二个字符更改为'd',使其变为"adc"。我认为以下代码可以实现:
s[1] = 'd';
Property or indexer 'string.this[int] 'cannot be assigned to -- it is read only
String
是不可变的。你可以使用 StringBuilder
来改变一个字符串:
var s = "abc";
var sb = new StringBuilder(s);
sb[1] = 'd';
s = sb.ToString();
:)
- Soner GönülString.Chars
属性 是只读的。您不能对其进行赋值。public char this[
int index
] { get; }
String.Remove
和 String.Insert
方法来实现。以下是在 LINQPad 上的示例;string s = "abc";
s = s.Remove(1, 1).Insert(1, "d");
s.Dump(); //adc
string
是不可变类型。你无法更改它们。它在创建后无法修改。即使你认为你改变了它们,实际上你会创建一个新的字符串对象。StringBuilder
类,它表示可变字符串,因为StringBuilder.Chars
属性具有get和set访问器。var sb = new StringBuilder("abc");
sb[1] = 'd';
sb.Dump(); // adc
虽然不建议这样做,但是您可以使用unsafe
上下文来实现:
fixed (char* pfixed = s)
pfixed[1] = 'd';
字符串是不可变的。你不能改变一个字符串,只能创建一个新的字符串。如果要修改一个字符串,你应该使用 StringBuilder
。
Enumerable.Select
:
string s = "abc";
string n = new string(s.Select((c, index) =>
{
if (index == 1)
return 'd';
else
return c;
}).ToArray());
Console.WriteLine(n); // adc