C#random
时间: 2025-06-21 18:57:22 浏览: 6
### C# 中随机数生成的相关信息与用法
在 C# 中,`Random` 类用于生成伪随机数。它提供了多种方法来生成不同范围和类型的随机数。以下是一个详细的介绍以及代码示例。
#### 1. 随机数生成的基本用法
`Random` 类的构造函数可以接受一个种子值(seed),如果不提供种子值,则会根据系统时钟生成默认种子[^1]。以下是基本用法:
```csharp
Random random = new Random();
int randomNumber = random.Next(); // 生成一个非负的随机整数
```
如果需要生成指定范围内的随机数,可以使用 `Next(int minValue, int maxValue)` 方法,其中 `maxValue` 是不包含在内的上限[^1]。
```csharp
int randomNumberInRange = random.Next(0, 100); // 生成 0 到 99 的随机整数
```
#### 2. 随机浮点数生成
`Random` 类还支持生成浮点数。可以使用 `NextDouble()` 方法生成一个介于 0.0 和 1.0 之间的双精度浮点数。
```csharp
double randomDouble = random.NextDouble(); // 生成 0.0 到 1.0 的随机浮点数
```
如果需要生成特定范围内的浮点数,可以通过缩放和偏移实现:
```csharp
double randomFloatInRange = random.NextDouble() * (max - min) + min; // 生成 min 到 max 的随机浮点数
```
#### 3. 随机布尔值生成
可以通过生成随机整数并将其映射为布尔值来实现随机布尔值的生成:
```csharp
bool randomBool = random.Next(2) == 1; // 50% 概率生成 true 或 false
```
#### 4. 随机字符串生成
可以结合字符数组和随机数生成器来生成随机字符串。以下是一个示例:
```csharp
private static string GenerateRandomString(Random random, int length)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)]).ToArray());
}
// 调用示例
string randomString = GenerateRandomString(new Random(), 10); // 生成长度为 10 的随机字符串
```
#### 5. 并发环境下的随机数生成
在多线程环境中,`Random` 实例可能会因为共享而导致冲突。推荐为每个线程创建独立的 `Random` 实例,或者使用 `ThreadLocal<Random>`[^3]。
```csharp
private static readonly ThreadLocal<Random> RandomInstance = new(() => new Random());
public static int GetRandomNumber(int min, int max)
{
return RandomInstance.Value.Next(min, max);
}
```
#### 6. 现代化随机数生成方式
从 .NET Core 2.1 开始,推荐使用 `System.RandomNumberGenerator` 来生成更高质量的随机数。这种方式适合加密场景。
```csharp
byte[] bytes = new byte[4];
RandomNumberGenerator.Fill(bytes);
int secureRandom = BitConverter.ToInt32(bytes, 0);
```
---
### 示例代码:生成 20 个 0 到 100 的随机数
以下是一个完整的示例,展示如何生成 20 个随机数并存储到列表中。
```csharp
using System;
using System.Collections.Generic;
internal class Program
{
private static List<int> scores = new List<int>();
static void Main(string[] args)
{
InitScores();
PrintScores();
}
private static void InitScores()
{
Random random = new Random();
for (int i = 0; i < 20; i++)
{
scores.Add(random.Next(0, 100)); // 生成 0 到 99 的随机整数
}
}
private static void PrintScores()
{
Console.WriteLine("Generated Scores:");
foreach (var score in scores)
{
Console.WriteLine(score);
}
}
}
```
---
### 注意事项
- 如果需要生成多个随机数,请尽量复用同一个 `Random` 实例,以避免因频繁创建实例导致的重复种子问题。
- 在性能敏感的场景下,可以考虑使用对象池来管理 `Random` 实例。
---
阅读全文
相关推荐


















