一、Random 类(伪随机数)

基本用法

csharp

Random rnd = new Random(200); // 指定种子
// 或不指定种子(默认使用当前时间作为种子)
Random rnd = new Random();

常用方法

  1. Next() - 返回非负随机整数

  2. Next(maxValue) - 返回小于指定最大值的非负随机整数(0到maxValue-1)

  3. Next(minValue, maxValue) - 返回指定范围内的随机整数

  4. NextDouble() - 返回0.0到1.0之间的随机浮点数

注意事项

csharp

// 错误用法:在循环内重复创建 Random 对象
for (int i = 0; i < 10; i++)
{
    Random r1 = new Random(); // for执行太快,种子相同
    Console.WriteLine(r1.Next());
}

// 正确用法:在循环外创建一次
Random r2 = new Random();
for (int i = 0; i < 10; i++)
{
    Console.WriteLine(r2.Next());
}

二、格式化随机小数

csharp

double a1 = rnd.NextDouble();
Console.WriteLine(Math.Round(a1, 3));      // 四舍五入保留3位
Console.WriteLine(a1.ToString("F3"));      // 格式化为3位小数

三、GUID(全局唯一标识符)

csharp

Guid.NewGuid(); // 生成格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  • 特点:基于系统时间、硬件ID等计算的128位随机数

  • 用途:产品密钥、订单号、唯一标识

  • 优点:全球唯一性

四、RNGCryptoServiceProvider(加密安全的随机数)

csharp

RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
byte[] bs = new byte[10];           // 创建字节数组
csp.GetBytes(bs);                   // 填充随机字节
Console.WriteLine(BitConverter.ToString(bs)); // 转换为16进制字符串
  • 输出格式:64-D4-78-CP-2E-67-5E-CC-E6-08

  • 特点:真随机、不可预测、安全性高

  • 用途:密码学、安全令牌、密钥生成

五、方法对比总结

方法类型安全性性能适用场景
Random 类伪随机游戏、模拟、测试数据
GUID唯一标识唯一标识、订单号
RNGCryptoServiceProvider真随机较低密码学、安全令牌

六、最佳实践建议

  1. 一般用途:使用 Random 类(注意单例使用)

  2. 需要唯一性:使用 Guid.NewGuid()

  3. 安全敏感:使用 RNGCryptoServiceProvider

  4. 格式化小数:使用 ToString("F") 或 Math.Round()

关键点总结

  1. Random 是伪随机,种子相同则序列相同

  2. 循环内不要重复创建 Random 对象

  3. GUID 不保证随机性,但保证唯一性

  4. 加密场景必须使用 RNGCryptoServiceProvider

  5. 根据需求选择合适的方法

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐