1. 使用?Random?類(簡單場景)
2. 使用?RandomNumberGenerator?類(安全場景)
3. 生成指定精度的隨機小數
C# 中生成隨機數的常用方法:
隨機數類型 | 實現方式 | 示例代碼 | 特點與適用場景 |
---|---|---|---|
隨機整數(無范圍) | Random 類 | Random rnd = new Random(); int num = rnd.Next(); | 生成 0 到 int.MaxValue 之間的整數,適用于簡單隨機場景 |
隨機整數(指定上限) | Random 類 | int num = rnd.Next(100); ?// 0-99(不包含 100) | 生成 0 到指定最大值之間的整數,適合需要控制上限的場景 |
隨機整數(指定范圍) | Random 類 | int num = rnd.Next(5, 15); ?// 5-14(包含 5,不包含 15) | 生成指定區間內的整數,適用范圍明確的場景 |
隨機雙精度浮點數 | Random 類 | double num = rnd.NextDouble(); ?// 0.0-1.0(不包含 1.0) | 生成 0 到 1 之間的小數,可通過計算擴展到任意范圍 |
安全隨機整數 | RandomNumberGenerator 類 | int num = RandomNumberGenerator.GetInt(100); ?// 0-99 | 加密級隨機數生成,適合安全敏感場景(如密碼重置令牌),需引用 System.Security.Cryptography |
安全隨機字節數組 | RandomNumberGenerator 類 | byte[] data = new byte[16]; RandomNumberGenerator.Fill(data); | 生成指定長度的隨機字節數組,用于加密、密鑰生成等安全場景 |
指定范圍的隨機小數 | 結合 Random 與計算 | double num = rnd.NextDouble() * (20 - 5) + 5; ?// 5.0-20.0 | 生成任意區間的隨機小數,通過線性變換實現 |
固定精度隨機小數 | 結合 Random 與四舍五入 | double num = Math.Round(rnd.NextDouble() * 100, 2); ?// 保留 2 位小數 | 生成指定精度的隨機小數,適合需要控制小數位數的場景(如金額) |
關鍵說明:
Random
類適合普通場景,創建成本低但隨機性較弱,避免短時間內創建多個實例(可能生成相同序列)RandomNumberGenerator
類提供加密級隨機性,適合安全相關場景,但性能開銷略高- 多線程環境中,
Random
需要同步處理,RandomNumberGenerator
則線程安全 - 如需可重復的隨機序列(如測試),可使用
new Random(固定種子)
構造Random
實例
1. 使用?Random
?類(簡單場景)
// 創建Random實例(建議程序中只創建一個實例)
Random random = new Random();// 生成0到int.MaxValue之間的隨機整數
int randomInt = random.Next();// 生成0到指定最大值(不包含)之間的隨機整數
int randomIntWithMax = random.Next(100); // 0-99之間// 生成指定范圍內(包含最小值,不包含最大值)的隨機整數
int randomIntInRange = random.Next(10, 20); // 10-19之間// 生成0.0到1.0之間的隨機雙精度浮點數
double randomDouble = random.NextDouble();// 生成指定范圍內的隨機雙精度浮點數
double randomDoubleInRange = random.NextDouble() * (max - min) + min;
2. 使用?RandomNumberGenerator
?類(安全場景)
適合加密、安全相關場景,需要引用?System.Security.Cryptography
?命名空間:
using System.Security.Cryptography;// 生成0到指定最大值(不包含)之間的隨機整數
int secureInt = RandomNumberGenerator.GetInt(100); // 0-99之間// 生成指定范圍內的隨機整數
int secureIntInRange = RandomNumberGenerator.GetInt(10, 20); // 10-19之間// 生成隨機字節數組
byte[] randomBytes = new byte[10];
RandomNumberGenerator.Fill(randomBytes);
3. 生成指定精度的隨機小數
// 生成保留2位小數的隨機數(0-100之間)
Random random = new Random();
double value = random.NextDouble() * 100;
double roundedValue = Math.Round(value, 2); // 保留2位小數
注意事項:
Random
?類的默認構造函數使用系統時鐘作為種子,短時間內創建多個實例可能生成相同序列- 多線程環境下使用?
Random
?需要加鎖,或使用?RandomNumberGenerator
- 安全敏感場景必須使用?
RandomNumberGenerator
- 如需重復生成相同序列,可使用帶固定種子的?
Random
?構造函數:new Random(seed)