c# - 将字符串作为数组访问,检查索引的值并可能更改该索引中的字符

标签 c# .net string

我一直在尝试读取一个字符串,然后对每个字符一个一个地运行一个随机数(如果生成 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/

相关文章:

c# - 在 C# 应用程序中使用 SQL 的最简单方法?

.net - 对 WCF 服务的异步调用以静默方式随机失败

C# 将字符的 x 次出现附加到字符串

string - 在 Excel If 语句中返回数字和文本字符串

c# - 如何递归地包含所有可导航属性以模拟延迟加载

c# - 从我的 C# 应用程序访问 webDav 文件夹时出现 401 未经授权的错误?

java - Lotus Notes 日历报告

c# - 事件消息 : An unhandled access exception has occurred (IIS 7. 5,无法加载网站)

c# - 将 .asmx C# Web 服务转换为 REST

python - 使用 python 格式化 Json 字符串