2

wpf でランダムな色を生成し、それらを配列に格納したいと考えています。

Random r;
Color[] colarr = new Color[6];
for (int i = 0; i < colarr.Length; i++)
{
   Color c=new Color();
   r=new Random();
   r.Next();
   c.R = (byte)r.Next(1, 255);
   c.G = (byte)r.Next(1, 255);
   c.B = (byte)r.Next(1, 255);
   c.A = (byte)r.Next(1, 255);
   c.B = (byte)r.Next(1, 255);          
   colarr[i] = c;
}

ただし、配列のすべての要素は 1 つの単色を表します。コードをデバッグすると、要素ごとにランダムな色が見つかりましたが、コードを実行すると (デバッグ モードではない)、同じ色が生成されます。これにより、コードが正しいことが明らかになり、実行中に何らかの問題が発生します。

編集 :

生成される色のランダム性を高めるにはどうすればよいですか?

4

3 に答える 3

2

ランダムな色を選択する別の方法が必要な場合は、反射を使用できます。呼び出される頻度に応じてパフォーマンスを比較する必要がありますが、あまり似ていない結果が返される可能性があります。値は関数内に保存されないことに注意してください。そうしないと、メソッドが連続して(ループrndなどから)呼び出されたときに同じ値が返されるという元の質問と同じ問題が発生します。for

Random rnd = new Random();

private Color GetRandomColour()
{
    var colorProperties = typeof(Colors).GetProperties(BindingFlags.Static | BindingFlags.Public);
    var colors = colorProperties.Select(prop => (Color)prop.GetValue(null, null));

    int index = rnd.Next(colors.Count());

    return colors.ElementAt(index);
}

こんな感じで使えます

for (int i = 0; i < colarr.Length; i++)
{          
   colarr[i] = GetRandomColour();
}
于 2013-05-18T12:00:04.000 に答える