Comprendre la génération de nombres aléatoires en C# et éviter la répétition de séquence
Cet article aborde un problème courant en C# : plusieurs instances de la classe Random
générant des séquences de nombres aléatoires identiques. La classe Random
, bien que conçue pour générer des nombres apparemment imprévisibles, s'appuie sur une valeur de départ pour son algorithme interne. Si plusieurs Random
objets sont créés en succession rapide, ils reçoivent souvent des valeurs de départ similaires (souvent basées sur l'horloge système), ce qui entraîne des séquences de sortie identiques.
Le problème : plusieurs Random
instances
Créer une nouvelle Random
instance pour chaque objet nécessitant des nombres aléatoires est la cause première. Étant donné que les valeurs de départ sont proches les unes des autres, les séquences générées sont presque identiques.
La solution : une Random
instance unique et partagée
La solution est simple : créez une seule Random
instance et partagez-la entre tous les objets nécessitant des nombres aléatoires. Cela garantit que chaque objet s'inspire de la même séquence évolutive, évitant ainsi le problème de répétition.
Voici comment implémenter cela à l'aide d'un membre statique :
<code class="language-csharp">class A { private static readonly Random rnd = new Random(); // Static, read-only instance public void Count() { int r1 = rnd.Next(-1, 1); int r2 = rnd.Next(-1, 1); } } class B { List<A> listOfA = new List<A>(); public void DoSomething() { foreach (A aClass in listOfA) { aClass.Count(); } } }</code>
En utilisant un champ static readonly
, nous garantissons qu'une seule instance Random
est créée une seule fois et partagée entre toutes les instances de la classe A
. Cela élimine le risque de valeurs de départ en double et garantit des séquences de nombres aléatoires uniques pour chaque appel à rnd.Next()
. Cette approche produit des séquences véritablement aléatoires et distinctes pour chaque A
objet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!