Ce face Random și Random.Shared
Random.Shared (.NET 6) este o instanță gata creată, sigură pentru mai multe fire de execuție; nu mai trebuie să creezi new Random() peste tot. Next(min, max) întoarce un întreg între min inclusiv și max exclusiv, deci un zar este Next(1, 7). NextDouble() dă un număr între 0 și 1.
Din .NET 8 există Shuffle (amestecă un tablou pe loc) și GetItems (alege elemente cu repetiție). Cu new Random(42) secvența este aceeași la fiecare rulare, util în teste.
Random nu este potrivit pentru parole, coduri de resetare sau tokenuri: folosește System.Security.Cryptography.RandomNumberGenerator (GetInt32, iar din .NET 8 GetString).
Exemple
Exemplul 1: Zar, alegere și amestecare
int zar = Random.Shared.Next(1, 7);
Console.WriteLine($"Zar: {zar}");
string[] premii = ["carte", "cană", "tricou"];
Console.WriteLine($"Premiu: {premii[Random.Shared.Next(premii.Length)]}");
int[] ordine = [1, 2, 3, 4, 5];
Random.Shared.Shuffle(ordine);
Console.WriteLine(string.Join(" ", ordine));
Rezultat posibil (diferă la fiecare rulare)
Zar: 4
Premiu: cană
3 5 1 4 2
Exemplul 2: Cod promoțional și cod de securitate
GetItems e suficient pentru un cod promoțional; codul de verificare trimis prin SMS se generează criptografic.
using System.Security.Cryptography;
char[] caractere = "ABCDEFGHJKLMNPRSTUVWXYZ23456789".ToCharArray();
string promo = new string(Random.Shared.GetItems(caractere, 6));
Console.WriteLine($"Cod promo: {promo}");
int codSms = RandomNumberGenerator.GetInt32(100000, 1000000);
Console.WriteLine($"Cod SMS: {codSms}");
Rezultat posibil (diferă la fiecare rulare)
Cod promo: K7RM3X
Cod SMS: 482915
Greșeli frecvente
Next(1, 6)pentru un zar nu dă niciodată 6: limita de sus este exclusivă.new Random()creat de multe ori la rând pe .NET Framework putea da aceleași numere (seed din ceas). Pe .NET modern problema nu mai apare, darRandom.Sharedrămâne varianta simplă.- O instanță
new Random()nu este sigură pentru mai multe fire: folosită în paralel, starea ei internă se poate strica (versiunile vechi ajungeau să întoarcă doar 0).Random.Sharednu are această problemă.
Comenzi înrudite
Guid (NewGuid, CreateVersion7): Identificator unic de 128 de biți: generare cu NewGuid sau CreateVersion7 (ordonat în timp), citire, formatare și comparare.Math (Round, Pow, Sqrt, Clamp): Clasa statică Math: rotunjire, putere, radical, valoare absolută, minim/maxim și limitarea unei valori într-un interval.