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.

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 .

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>