You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何交换数组字符?字符串索引赋值报错怎么解决?

嘿,咱们来搞定这个交换字符的小问题!

小朋友你好呀~先给你举个小例子:你有没有见过那种印得死死的故事书?上面的字是没法直接擦掉重写的,对吧?C#里的string(就是你代码里的s)就跟这种书一样——它是“只读”的,意思就是你不能直接改掉它里面的某个字符,这就是你看到那个报错的原因啦!

那怎么才能交换字符呢?咱们得先把这本“印死的书”变成可擦写的白板,也就是把string转换成char[](字符数组)。这个数组就像白板一样,你想擦哪个字、改哪个字都没问题~等你交换完字符,再把白板变回“故事书”就好啦!

先看看你原来的问题代码

你写的代码之所以报错,就是因为直接去改string里的字符啦:

string s = "hello";
char temp;
int j = s.Length - 1; // 假设你是想和最后一个字符交换哦
for (int i = 0; i < s.Length -1; i++) { 
    temp = s[i]; 
    s[i] = s[j]; // 报错:string的字符不能直接改
    s[j] = temp; // 同样报错!
}

咱们来修改成能运行的代码

分三步,超简单:

  1. 把string转成可修改的char[](书→白板)
  2. 在数组上做交换操作(在白板上改字)
  3. 把数组转回string(白板→新书)

完整的正确代码是这样的:

string s = "hello";
char temp;
int j = s.Length - 1;

// 第一步:把字符串转成字符数组(变成可擦写的白板)
char[] charArray = s.ToCharArray();

// 第二步:在数组里交换字符,这时候不会报错啦!
for (int i = 0; i < charArray.Length / 2; i++) { // 这里改成除以2,交换一半就够啦,不然会换回去哦
    temp = charArray[i];
    charArray[i] = charArray[j];
    charArray[j] = temp;
    j--; // 让j往前挪一位,交换下一对
}

// 第三步:把字符数组转回字符串(重新变成书)
s = new string(charArray);

// 看看结果!
Console.WriteLine(s); // 会输出 "olleh" 哦

再给你划个重点

  • string是只读的“书”:不能直接改里面的字符
  • char[]是可擦写的“白板”:可以随便修改里面的内容
  • 交换字符的流程就是:书 → 白板 → 改字 → 新书

内容的提问来源于stack exchange,提问作者Beginner Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:32:51