someString[someRandomIdx] = 'g';
会给我一个错误,
我如何实现上述目标?
修改
是的,它的类型是'string'
答案 0 :(得分:37)
如果它是string
类型,那么你就不能这样做,因为字符串是不可变的 - 一旦设置它们就无法更改。
要实现您的目标,您可以使用StringBuilder
StringBuilder someString = new StringBuilder("someString");
someString[4] = 'g';
<强>更新强>
为什么要使用string
而不是StringBuilder
?原因很多。以下是我能想到的一些内容:
答案 1 :(得分:29)
C#字符串是不可变的。您应该使用修改后的内容创建一个新字符串。
char[] charArr = someString.ToCharArray();
charArr[someRandomIdx] = 'g'; // freely modify the array
someString = new string(charArr); // create a new string with array contents.
答案 2 :(得分:4)
由于没有人提到一线解决方案:
someString = someString.Remove(index, 1).Insert(index, "g");
答案 3 :(得分:3)
如果您绝对必须更改字符串的现有实例,则可以使用不安全代码:
public static unsafe void ChangeCharInString(ref string str, char c, int index)
{
GCHandle handle;
try
{
handle = GCHandle.Alloc(str, GCHandleType.Pinned);
char* ptr = (char*)handle.AddrOfPinnedObject();
ptr[index] = c;
}
finally
{
try
{
handle.Free();
}
catch(InvalidOperationException)
{
}
}
}
答案 4 :(得分:1)
查看this article如何修改C#中的字符串内容。 字符串是不可变的,因此必须先将它们转换为中间对象才能进行修改。
答案 5 :(得分:0)
如果您愿意介绍this.moveUp = function(){
if(this.y > gameCanvas.height / 8){
this.y -= 7;
}
};
this.moveDown = function(){
if(this.y < gameCanvas.height - map.tSizeY * 1.5){
this.y += 7;
}
};
this.moveLeft = function(){
if(this.x > gameCanvas.width / 8){
this.x -= 7;
}
};
this.moveRight = function(){
if(this.x < gameCanvas.width - map.tSizeX * 1.25){
this.x += 7;
}
}
:
Also(...)
答案 6 :(得分:-1)
您也可以使用Insert()
方法,例如somestring.Insert(index,data)