Un breve appunto sull’utilizzo della classe Random in Silverlight (c#). Ho creato una funzione (del ca**o) per generare automaticamente un solid brush con colori casuali, canale alpha compreso.
public SolidColorBrush RandomColor()
{
Random rnd = new Random();
SolidColorBrush scb;
byte a = (byte)rnd.Next(256);
byte r = (byte)rnd.Next(256);
byte g = (byte)rnd.Next(256);
byte b = (byte)rnd.Next(256);
scb = new SolidColorBrush(Color.FromArgb(a, r, g, b));
return scb;
}
Semplice no? Se usate il debug step by step tutto fila liscio e ad ogni chiamata crea un nuovo colore. Se invece lanciate l’applicazione vi accorgerete che ad ogni chiamata il numero generato è lo stesso.
Il problema è riassunto qui (fonte MSDN):If the same seed is used repeatedly, the same series of numbers is generated. One way to produce different sequences is to make the seed value time-dependent, thereby producing a different series with each new instance of Random.
Per risulverlo è sufficiente dichiarare rnd fuori dalla funzione:
private Random rnd = new Random();
public SolidColorBrush RandomColor()
{
Random rnd = new Random();
SolidColorBrush scb;
byte a = (byte)rnd.Next(256);
byte r = (byte)rnd.Next(256);
byte g = (byte)rnd.Next(256);
byte b = (byte)rnd.Next(256);
scb = new SolidColorBrush(Color.FromArgb(a, r, g, b));
return scb;
}
Ciao!
Se trovi questo articolo su un blog diverso da “blog.merlinox.com” si tratta probabilmente di una copia non autorizzata. L’indirizzo originale di questo articolo è: Silverlight: Random scritto da Merlinox.
