Wie generiert man eine ganze Zufallszahl in C#? Ein für alle Mal erklärt
\nDie Frage nach der Generierung von Zufallszahlen ist eine der beliebtesten auf Stack Overflow. Was könnte einfacher sein? Doch in der Praxis machen selbst erfahrene C#-Entwickler klassische Fehler: Sie erhalten bei jedem Durchlauf dieselben Werte, stoßen auf nicht-zufällige Sequenzen oder vergessen die Thread-Sicherheit. Heute klären wir ein für alle Mal, wie man ganze Zufallszahlen in C# richtig generiert, und beantworten alle „Warum“-Fragen aus dem Top-Thread auf Stack Overflow.
\n\nDieser Artikel ist Ihre Chance, nicht länger Code aus dem Internet zu kopieren, sondern zu verstehen, was unter der Haube von System.Random wirklich passiert. Los geht's!
Warum bekommen Anfänger immer wieder dieselbe Zahl?
\nDie häufigste Frage: „Ich erstelle Random und bekomme immer dieselbe Zahl!“. Schauen wir uns den typischen Code-Fehler an:
\n\n// ❌ SCHLECHTES BEISPIEL\nfor (int i = 0; i < 5; i++)\n{\n Random rnd = new Random();\n Console.WriteLine(rnd.Next(1, 100));\n}\n\n\nWas gibt dieser Code aus? Mit 99% Wahrscheinlichkeit fünf identische Zahlen. Warum? Weil Random die Systemuhr zur Initialisierung (Seed) verwendet. Wenn Sie mehrere Random-Instanzen hintereinander erstellen, erhalten sie denselben Seed und erzeugen daher dieselbe Sequenz.
Die richtige Lösung: Eine einzige Random-Instanz erstellen und mehrfach verwenden:
\n\n// ✅ RICHTIGES BEISPIEL\nRandom rnd = new Random();\nfor (int i = 0; i < 5; i++)\n{\n Console.WriteLine(rnd.Next(1, 100));\n}\n\n\nJede Zahl ist jetzt anders. Die einfache Regel: Ein Random pro Ausführungsthread.
\n\nRandom.Next(): Drei Wege zu einer ganzen Zufallszahl
\nDie Klasse System.Random bietet drei Überladungen der Methode Next(). Sehen wir uns jede mit Beispielen an:
1. Random.Next() – ohne Parameter
\nGibt eine nicht-negative ganze Zahl im Bereich von 0 bis Int32.MaxValue - 1 zurück. Also von 0 bis 2.147.483.646.
Random rnd = new Random();\nint anyNumber = rnd.Next();\nConsole.WriteLine(anyNumber); // Zum Beispiel: 1789034215\n\n\n2. Random.Next(Int32) – mit Obergrenze
\nGibt eine Zahl von 0 (inklusive) bis zur angegebenen Obergrenze (exklusive) zurück.
\nint dice = rnd.Next(7); // 0, 1, 2, 3, 4, 5 oder 6\nConsole.WriteLine(dice);\n\n\n3. Random.Next(Int32, Int32) – Bereich [min, max)
\nDie beliebteste Variante zur Generierung einer ganzen Zufallszahl in C# in einem bestimmten Bereich.
\n// Zufallszahl von 1 bis 100 (inklusive)\nint score = rnd.Next(1, 101);\nConsole.WriteLine(score);\n\n\nWichtig zu merken: Die Obergrenze ist exklusive. Um eine Zahl von 1 bis 6 (wie bei einem Würfel) zu erhalten, schreiben Sie Next(1, 7).
Die Top-3-Fehler bei der Arbeit mit Random in C#
\nBasierend auf echten Fragen von Stack Overflow C# random, hier die häufigsten Fallstricke:
\n\n- \n
- Fehler Nr. 1: Neues Random in einer Schleife erstellen. Das haben wir bereits behandelt – es führt zu identischen Zahlen. Lösung:
new Random()außerhalb der Schleife platzieren. \n - Fehler Nr. 2: Random ist nicht threadsicher. Wenn mehrere Threads eine
Random-Instanz ohne Synchronisation verwenden, kann es zu Abstürzen oder Nullwerten kommen. Verwenden SielockoderThreadLocal<Random>. \n - Fehler Nr. 3: Random für Passwörter oder Tokens verwenden.
System.Randomist ein Pseudozufallsgenerator. Er ist vorhersagbar! Für Sicherheitszwecke benötigen SieSystem.Security.Cryptography.RandomNumberGenerator. \n