只读赋值字符串c#

时间:2017-10-01 14:28:39

标签: c#

我正在尝试分配“tela [counter] = letra.ToString();”,但它显示以下错误消息“属性或索引器'string.this [int]无法分配给 - 它是只读“。

我看到一些话题说你必须为属性定义{get; set;},但我已经完成了这个,但它没有用。

[OBS]我尝试创建get和set方法,但问题仍然存在

     public String tela { get; set; }

    private void btnSendWord_Click(object sender, EventArgs e)
    {
        char letra = Convert.ToChar(txtGetWord.Text);
        MessageBox.Show(comboPalavra[0]);
        Boolean codigoVerificador;
        codigoVerificador =  verificador.VerificaLetra(comboPalavra[0],letra);
        if (codigoVerificador == true)
        {

            foreach(char c in comboPalavra[0].ToCharArray())
            {
                counter++;
                if(c == letra)
                {
                    tela[counter] = letra.ToString();
                }
            }
        }
        else MessageBox.Show("Nao contem");
    }

2 个答案:

答案 0 :(得分:3)

字符串是不可变的,这意味着您无法在不创建新字符串的情况下更改变量的值。

您正在尝试更改字符串中的单个字符,这是不允许的:

tela[counter] = letra.ToString();

解决方法是使用StringBuilder。您可以将其视为string的可变版本。

您可以在循环外声明StringBuilder

var telaBuilder = new StringBuilder(tela);

在循环中,将错误行更改为:

telaBuilder[counter] = letra;

在循环之后,将telaBuilder分配给tela

tela = telaBuilder.ToString();

不要忘记using System.Text

答案 1 :(得分:1)

这是string的索引器的签名:

public char this[int index] { get; }

看到它返回一个char并且只有一个get,这意味着它是只读的,你无法为其分配内容。这就是你收到错误的原因。

如果要替换特定位置的字符串中的特定字母,可以这样做:

var name = "ferry Seinfeld";
char[] nameArray = name.ToArray();
nameArray[0] = 'J';
name = new string(nameArray);

请查看String的{​​{3}}方法,并查看Replace课程,看看这些是否符合您的需求。