0

我正在通过调试测试一个函数,它向我展示了良好的结果,如果我在发布时对其进行测试,它会显示不同的结果。

这里是:

int index = 0;
        char[] result = new char[input.Length];
        for (int i = 0; i < input.Length; i++)
        {
            System.Random RandNum = new System.Random();
            int MyRandomNumber = RandNum.Next(0, 100);
            if ((input[i] == '|') && (MyRandomNumber < 35))
            {
                result[index++] = ' ';
            }
            else
                result[index++] = input[i];
        }
        return new string(result, 0, index);

我有一个字符串,例如:“how|you're|doing|today”,我想替换 35% 的 | 带有“”(空格)的字符;

例如,在调试中它显示:你如何|今天|在发布中,或者你今天如何|你在|今天或你今天如何。

你怎么看 ?

如果您有其他建议,我愿意接受。

4

1 回答 1

4

您的问题几乎肯定与您创建随机数的方式有关。如果您创建一个新的 System.Random 而不向其传递种子,它将使用当前时间。如果这发生得足够快,新对象将使用相同的种子创建,因此将为每个随机数提供相同的数字。

要解决此问题,请更改您的代码,如下所示:

    int index = 0;
    char[] result = new char[input.Length];
    System.Random RandNum = new System.Random();
    for (int i = 0; i < input.Length; i++)
    {
        int MyRandomNumber = RandNum.Next(0, 100);
        if ((input[i] == '|') && (MyRandomNumber < 35))
        {
            result[index++] = ' ';
        }
        else
            result[index++] = input[i];
    }
    return new string(result, 0, index);

也许其他人可以解释为什么这只发生在 Release 中,老实说,那部分在我头上。关于调试需要更长的时间所以种子不同的东西?

于 2012-06-26T14:04:44.990 回答