更改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

我如何完成这个简单的任务(不使用相当复杂的子字符串方法)?

更改c#字符串中特定索引处的字符的默认方式是什么?

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.RemoveString.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