在项目开发中,一般都会使用到“随机数”,但是在DotNet中的随机数并非真正的随机数,可在一些情况下生成重复的数字,现在总结一下在项目中生成随机数的方法。

1.随机布尔值:

  1. /// <summary>
  2. /// 随机布尔值
  3. /// </summary>
  4. /// <param name="random"></param>
  5. /// <returns>随机布尔值</returns>
  6. public static bool NextBoolean(this Random random)
  7. {
  8. if (random == null)
  9. {
  10. throw new ArgumentNullException("random");
  11. }
  12. return random.NextDouble() > 0.5;
  13. }

2.指定枚举类型的随机枚举值:

  1. /// <summary>
  2. /// 指定枚举类型的随机枚举值
  3. /// </summary>
  4. /// <param name="random"></param>
  5. /// <returns>指定枚举类型的随机枚举值</returns>
  6. public static T NextEnum<T>(this Random random) where T : struct
  7. {
  8. var type = typeof(T);
  9. if (!type.IsEnum)
  10. {
  11. throw new InvalidOperationException();
  12. }
  13. var array = System.Enum.GetValues(type);
  14. var index = random.Next(array.GetLowerBound(), array.GetUpperBound() + );
  15. return (T)array.GetValue(index);
  16. }

3.随机数填充的指定长度的数组:

  1. /// <summary>
  2. /// 随机数填充的指定长度的数组
  3. /// </summary>
  4. /// <param name="random"></param>
  5. /// <param name="length">数组长度</param>
  6. /// <returns>随机数填充的指定长度的数组</returns>
  7. public static byte[] NextBytes(this Random random, int length)
  8. {
  9. if (length < )
  10. {
  11. throw new ArgumentOutOfRangeException("length");
  12. }
  13. var data = new byte[length];
  14. random.NextBytes(data);
  15. return data;
  16. }

4. 数组中的随机元素:

  1. /// <summary>
  2. /// 数组中的随机元素
  3. /// </summary>
  4. /// <typeparam name="T">元素类型</typeparam>
  5. /// <param name="random"></param>
  6. /// <param name="items">元素数组</param>
  7. /// <returns>元素数组中的某个随机项</returns>
  8. public static T NextItem<T>(this Random random, T[] items)
  9. {
  10. return items[random.Next(, items.Length)];
  11. }

5.指定时间段内的随机时间值:

  1. /// <summary>
  2. /// 指定时间段内的随机时间值
  3. /// </summary>
  4. /// <param name="random"></param>
  5. /// <param name="minValue">时间范围的最小值</param>
  6. /// <param name="maxValue">时间范围的最大值</param>
  7. /// <returns>指定时间段内的随机时间值</returns>
  8. public static DateTime NextDateTime(this Random random, DateTime minValue, DateTime maxValue)
  9. {
  10. var ticks = minValue.Ticks + (long)((maxValue.Ticks - minValue.Ticks) * random.NextDouble());
  11. return new DateTime(ticks);
  12. }

6. 随机时间值:

  1. /// <summary>
  2. /// 随机时间值
  3. /// </summary>
  4. /// <param name="random"></param>
  5. /// <returns>随机时间值</returns>
  6. public static DateTime NextDateTime(this Random random)
  7. {
  8. return NextDateTime(random, DateTime.MinValue, DateTime.MaxValue);
  9. }

7.获取指定的长度的随机数字字符串:

  1. /// <summary>
  2. /// 获取指定的长度的随机数字字符串
  3. /// </summary>
  4. /// <param name="random"></param>
  5. /// <param name="length">要获取随机数长度</param>
  6. /// <returns>指定长度的随机数字符串</returns>
  7. public static string GetRandomNumberString(this Random random, int length)
  8. {
  9. if (length < )
  10. {
  11. throw new ArgumentOutOfRangeException("length");
  12. }
  13. char[] pattern = { '', '', '', '', '', '', '', '', '', '' };
  14. var result = "";
  15. var n = pattern.Length;
  16. for (var i = ; i < length; i++)
  17. {
  18. var rnd = random.Next(, n);
  19. result += pattern[rnd];
  20. }
  21. return result;
  22. }

8.获取指定的长度的随机字母字符串:

  1. /// <summary>
  2. /// 获取指定的长度的随机字母字符串
  3. /// </summary>
  4. /// <param name="random"></param>
  5. /// <param name="length">要获取随机数长度</param>
  6. /// <returns>指定长度的随机字母组成字符串</returns>
  7. public static string GetRandomLetterString(this Random random, int length)
  8. {
  9. if (length < )
  10. {
  11. throw new ArgumentOutOfRangeException("length");
  12. }
  13. char[] pattern =
  14. {
  15. 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
  16. 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
  17. };
  18. var result = "";
  19. var n = pattern.Length;
  20. for (var i = ; i < length; i++)
  21. {
  22. var rnd = random.Next(, n);
  23. result += pattern[rnd];
  24. }
  25. return result;
  26. }

9.获取指定的长度的随机字母和数字字符串:

  1. /// <summary>
  2. /// 获取指定的长度的随机字母和数字字符串
  3. /// </summary>
  4. /// <param name="random"></param>
  5. /// <param name="length">要获取随机数长度</param>
  6. /// <returns>指定长度的随机字母和数字组成字符串</returns>
  7. public static string GetRandomLetterAndNumberString(this Random random, int length)
  8. {
  9. if (length < )
  10. {
  11. throw new ArgumentOutOfRangeException("length");
  12. }
  13. char[] pattern =
  14. {
  15. '', '', '', '', '', '', '', '', '', '',
  16. 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
  17. 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
  18. };
  19. var result = "";
  20. var n = pattern.Length;
  21. for (var i = ; i < length; i++)
  22. {
  23. var rnd = random.Next(, n);
  24. result += pattern[rnd];
  25. }
  26. return result;
  27. }

生成随机数的方式较多,可根据具体的要求来生成对应的随机数。

DotNet生成随机数的一些方法的更多相关文章

  1. PyTorch 常用方法总结1:生成随机数Tensor的方法汇总(标准分布、正态分布……)

    在使用PyTorch做实验时经常会用到生成随机数Tensor的方法,比如: torch.rand() torch.randn() torch.normal() torch.linespace() 在很 ...

  2. 关于使用jmeter函数助手生成随机数的使用方法

    记录自己的生活!   1.使用jmeter函数助手的生成随机数的方法,主要包含以下几个函数:     [_Random]     [_RandomString]   2.关于[_Random]函数的说 ...

  3. 简单生成随机数id的方法

    近期项目中需要生成不同的id,之前都是使用UUID来实现的,现在需求是只要8位数的,也就是说用户量是有限的,暂时是不需要太多的,所以就简单的使用Set实现了这一功能. /** * 生成8位不重复随机i ...

  4. pytorch 生成随机数

    在使用PyTorch做实验时经常会用到生成随机数Tensor的方法,比如: torch.rand() torch.randn() torch.normal() torch.linespace() 在很 ...

  5. php生成随机数的三种方法

    php生成随机数的三种方法 如何用php生成1-10之间的不重复随机数? 例1,使用shuffle函数生成随机数. <?php$arr=range(1,10);shuffle($arr);for ...

  6. js生成随机数的方法实例总结

    js生成随机数主要用到了内置的Math对象的random()方法.用法如:Math.random().它返回的是一个 0 ~ 1 之间的随机数.有了这么一个方法,那生成任意随机数就好理解了.比如实际中 ...

  7. js生成随机数的方法小结

    js生成随机数主要用到了内置的Math对象的random()方法.用法如:Math.random().它返回的是一个 0 ~ 1 之间的随机数.有了这么一个方法,那生成任意随机数就好理解了.比如实际中 ...

  8. js生成随机数的方法实例总结 [收藏]

    js生成随机数的方法实例总结 js生成随机数主要用到了内置的Math对象的random()方法.用法如:Math.random().它返回的是一个 0 ~ 1 之间的随机数.有了这么一个方法,那生成任 ...

  9. Python生成随机数的方法

    这篇文章主要介绍了Python生成随机数的方法,有需要的朋友可以参考一下 如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与 ...

随机推荐

  1. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  2. .NET 对接JAVA 使用Modulus,Exponent RSA 加密

    最近有一个工作是需要把数据用RSA发送给Java 虽然一开始标准公钥 net和Java  RSA填充的一些算法不一样 但是后来这个坑也补的差不多了 具体可以参考 http://www.cnblogs. ...

  3. 学习ASP.NET Core,怎能不了解请求处理管道[1]: 中间件究竟是个什么东西?

    ASP.NET Core管道虽然在结构组成上显得非常简单,但是在具体实现上却涉及到太多的对象,所以我们在 "通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流 ...

  4. 做一个gulp+webpack+vue的单页应用开发架子

    1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...

  5. vue.js学习笔记

    有了孩子之后,元旦就哪也去不了了(孩子太小),刚好利用一些时间,来公司充充电补补课,学习学习新技术,在这里做一个整理和总结.(选择的东西,既然热爱就把他做好吧!). 下来进入咱们的学习环节: 一.从H ...

  6. [原] 利用 OVS 建立 VxLAN 虚拟网络实验

    OVS 配置 VxLAN HOST A ------------------------------------------ | zh-veth0(10.1.1.1) VM A | | ---|--- ...

  7. 修改session垃圾回收几率

    <?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...

  8. equals变量在前面或者在后面有什么区别吗?这是一个坑点

    我就不废话那么多,直接上代码: package sf.com.mainTest; public class Test { public static void main(String[] args) ...

  9. 直播推流端弱网优化策略 | 直播 SDK 性能优化实践

    弱网优化的场景 网络直播行业经过一年多的快速发展,衍生出了各种各样的玩法.最早的网络直播是主播坐在 PC 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...

  10. Oracle:一个用户操作多个表空间中表的问题(转)

    原文地址:http://blog.csdn.net/shmiloy001/article/details/6287317 首先,授权给指定用户. 一个用户的默认表空间只能有一个,但是你可以试下用下面的 ...