我正在尝试分配“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");
}
答案 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课程,看看这些是否符合您的需求。