Silverlight: Random

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.

[ad name=”postdx”]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!

Loading Facebook Comments ...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *