我一直在尝试读取一个字符串,然后逐个为每个字符运行一个随机数,如果生成一个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';
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的错误:
属性或索引器'
string.this[int]'无法分配 - 它是只读的
有人能告诉我如何解决这个问题,或者建议我以不同的方式实现我的目标吗?
p.s*_*w.g 10
.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
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用Linq(以及一个非常丑陋的三元运算符串).
var new string(mutate.Select(c =>
(random.Next(1, 1000) == 5) ? ((c == '0') ? '1' : (c == '1') ? '0' : c) : c).ToArray());
Run Code Online (Sandbox Code Playgroud)