Logo

How do I generate a random integer in C#?

Generating a random integer in C# typically involves the System.Random class. Below, you’ll discover the main approaches, along with a few tips to ensure better randomness and avoid common pitfalls.

Using System.Random

Random random = new Random(); int randomNumber = random.Next(); Console.WriteLine(randomNumber);
  • Default Behavior: random.Next() generates a non-negative random integer (0 to Int32.MaxValue - 1).
  • Range Overload: You can specify bounds, for example random.Next(1, 101) to get a random number between 1 (inclusive) and 101 (exclusive).

Avoid Re-Creating Random Objects

Creating a new Random instance multiple times in a short loop might yield duplicate values because it seeds based on the system clock. Always reuse the same Random instance, or store it in a static field if used frequently.

Generating Cryptographically Secure Random Numbers

For security-sensitive scenarios (like generating secure tokens or passwords), prefer the cryptographic RNG. In .NET 6+, you can use:

using System.Security.Cryptography; int secureRandomNumber = RandomNumberGenerator.GetInt32(1, 101); Console.WriteLine(secureRandomNumber);
  • Usage: RandomNumberGenerator.GetInt32(minValue, maxValue) returns a cryptographically secure random integer from the specified inclusive range of minValue up to but not including maxValue.
  • Scenario: Ideal for password resets, API keys, and other security-critical features.

Best Practices

  1. Seed Management: If you need deterministic results (for testing or replay scenarios), specify a fixed seed: new Random(42). Otherwise, let the runtime pick it.
  2. Performance: For high-frequency random calls, you might want to keep one static Random or RandomNumberGenerator object and share it across multiple threads, using concurrency-safe patterns.
  3. Distribution: Random.Next() is uniform. If you need non-uniform distributions (like Gaussian), you’ll have to implement the logic or use specialized libraries.

Further Improving Your C# Skills

To strengthen your command of C# and solidify best coding practices, check out hands-on, pattern-based courses at DesignGurus.io:

These courses focus on problem-solving approaches that can dramatically improve your interview preparedness. You might also find valuable insights on system design and coding tips via the DesignGurus.io YouTube channel.

In summary, picking System.Random covers most basic random number generation needs, while RandomNumberGenerator offers a cryptographically secure alternative for sensitive operations. Consistent usage of these APIs helps maintain reliable, high-quality randomness in your .NET applications.

CONTRIBUTOR
TechGrind