我一直在尝试读取一个字符串,然后对每个字符一个一个地运行一个随机数(如果生成 5),然后将字符从 1 更改为 0,反之亦然。我觉得我快到了,这是我第三次尝试这样做,但我在写入索引时遇到了一个小问题,因为它告诉我它是只读的。这是我的代码:
string mutate = "1010";
for (int i = 0; i < 4; i++)
{
int MutProbablity = random.Next(1, 1000);
if (MutProbablity == 5)
{
if (mutate[i] == '0')
{
mutate[i] = '1';
}
else if (mutate[i] == '1')
{
mutate[i] = '0';
}
}
}
这是我的错误:
Property or indexer '
string.this[int]
' cannot be assigned to -- it is read only
有人可以告诉我如何解决这个问题,或者建议我实现目标的不同方法吗?
最佳答案
.NET 中的字符串是不可变的,因此您无法修改任何字符,但您可以先将其转换为可变的 char[]
来实现您的目标。
像这样:
var chars = mutate.ToCharArray(); // convert to char[]
for (int i = 0; i < 4; i++)
{
int MutProbablity = random.Next(1, 1000);
if (MutProbablity == 5)
{
if (chars[i] == '0')
{
chars[i] = '1';
}
else if (chars[i] == '1')
{
chars[i] = '0';
}
}
}
mutate = new String(chars); // convert to back to string
另一种方法是使用 Linq(以及公认的非常丑陋的三元运算符字符串)。
var new string(mutate.Select(c =>
(random.Next(1, 1000) == 5) ? ((c == '0') ? '1' : (c == '1') ? '0' : c) : c).ToArray());
关于c# - 将字符串作为数组访问,检查索引的值并可能更改该索引中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094037/