更改c#字符串中特定索引处的字符的默认方式是什么?
本文关键字:字符 默认 方式 是什么 索引 字符串 更改 | 更新日期: 2023-09-27 17:52:34
我有一个字符串:
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();
不推荐使用,但是您可以使用unsafe
context:
fixed (char* pfixed = s)
pfixed[1] = 'd';
错误信息明确,String.Chars
属性为只读。你不能放过它。
是这样定义的;
public char this[
int index
] { get; }
可以看到,没有set
访问器。
您可以使用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
字符串是不可变的。你不能改变字符串,你只能创建一个新的字符串。要修改这样的字符串,您应该使用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