如何在 C# 程序中修复 CS0200?

How to fix CS0200 in C# program?

我知道相应的微软支持我不应该使用readonly,但我没有。

错误 CS0200 显示在试图更新字符串中单个字符的行上:

"unable to assign value to property or indexer".

    private string Start { set; get; }
    private string Middle { set; get; }
    private string Finish { set; get; }
    private string Alpha { set; get; }

    public Form1()
    {
        InitializeComponent();
        Alpha = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя";
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Start = textBox1.Text;
        Middle = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя";
        for(int i = 0; i < Start.Length; i++ )
        {
            for (int j = 0; j < Middle.Length ;j++)
            {
                if (Start[i] == Middle[j])
                {
                    char el = Middle[i]; 
                    Middle[i] = Middle[j]; // CS0200 
                    Middle[j] = el;        // CS0200 
                }       
            }
        }
    }

字符串是不可变的,你不能这样改变它们。 使用 StringBuilder 来创建另一个字符改变的字符串,例如:

if (Start[i] == Middle[j])
{
    StringBuilder sb = new (Middle);
    (sb[i], sb[j]) = (sb[j], sb[i]);
    Middle = sb.ToString();
}

甚至更好 - 从一开始就将 Middle 声明为 StringBuilder,这将减少字符串 -> StringBuilder -> 字符串转换。 如果您只交换字符并且从不删除/添加任何字符,字符数组也是一个选项。