2

私はそのようなコードを持っています:文字列テキストには{AVATAR}が含まれています

    if (text.Contains("{AVATAR}"))
        text = Regex.Replace(text, "{AVATAR}", m => rand_avatars());
public string rand_avatars()
{
    string[] text = avatars.ToArray();
    Random rand = new Random(DateTime.Now.Millisecond);
    return text[rand.Next(text.Length)];
}

しかし、replace in out の後、アバターから 2 つの同じ文字列を受け取ります。なんで?

4

2 に答える 2

10

これはおそらく、DateTime.Now.Millisecondが呼び出し間で変更されていないためであり、そのため、同じシードが乱数ジェネレーターに 2 回使用されています。

Random オブジェクトをフィールドにして、一度だけ初期化してから、 で再利用する必要がありrand_avatars()ます。

または、置換を行う前に一度ローカルとして初期化し、 に渡しrand_avatars(Random random)ます (パラメーターとして Random を に追加しましたrand_avatars())。

于 2013-05-22T13:12:19.253 に答える