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);

おそらく、これがリリースでのみ発生する理由を他の誰かが説明できるかもしれませんが、その部分は正直に私の頭の中にあります。デバッグに時間がかかるため、シードが異なりますか?

于 2012-06-26T14:04:44.990 に答える