C#扩展(2):Random的扩展
在.net中关于Random一共也只有这几个方法
// // 摘要: // 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。 [ComVisible(true)] public class Random { // // 摘要: // 使用与时间相关的默认种子值,初始化 System.Random 类的新实例。 public Random(); // // 摘要: // 使用指定的种子值初始化 System.Random 类的新实例。 // // 参数: // Seed: // 用来计算伪随机数序列起始值的数字。如果指定的是负数,则使用其绝对值。 public Random(int Seed); // // 摘要: // 返回一个非负随机整数。 // // 返回结果: // 大于等于零且小于 System.Int32.MaxValue 的 32 位带符号整数。 [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public virtual int Next(); // // 摘要: // 返回一个小于所指定最大值的非负随机整数。 // // 参数: // maxValue: // 要生成的随机数的上限(随机数不能取该上限值)。maxValue 必须大于或等于零。 // // 返回结果: // 大于等于零且小于 maxValue 的 32 位带符号整数,即:返回值的范围通常包括零但不包括 maxValue。不过,如果 maxValue 等于零,则返回 // maxValue。 // // 异常: // T:System.ArgumentOutOfRangeException: // maxValue 小于零。 public virtual int Next(int maxValue); // // 摘要: // 返回在指定范围内的任意整数。 // // 参数: // minValue: // 返回的随机数的下界(随机数可取该下界值)。 // // maxValue: // 返回的随机数的上界(随机数不能取该上界值)。maxValue 必须大于或等于 minValue。 // // 返回结果: // 一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数,即:返回的值范围包括 minValue 但不包括 maxValue。如果 // minValue 等于 maxValue,则返回 minValue。 // // 异常: // T:System.ArgumentOutOfRangeException: // minValue 大于 maxValue。 public virtual int Next(int minValue, int maxValue); // // 摘要: // 用随机数填充指定字节数组的元素。 // // 参数: // buffer: // 包含随机数的字节数组。 // // 异常: // T:System.ArgumentNullException: // buffer 为 null。 public virtual void NextBytes(byte[] buffer); // // 摘要: // 返回一个介于 0.0 和 1.0 之间的随机浮点数。 // // 返回结果: // 大于等于 0.0 并且小于 1.0 的双精度浮点数。 [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public virtual double NextDouble(); // // 摘要: // 返回一个介于 0.0 和 1.0 之间的随机浮点数。 // // 返回结果: // 大于等于 0.0 并且小于 1.0 的双精度浮点数。 [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] protected virtual double Sample(); }
C#关于Random提供的三种实例方法(1).Next() (2).NextBytes (3).NextDouble()
提供的方法很少,所以我们很有必要我们可以扩展一下
.Net Random常用扩展
Enum:枚举的扩展
public static T NextEnum<T>(this Random random) where T : struct { Type type = typeof(T); //获取返回值的类型 if (type.IsEnum == false) throw new InvalidOperationException(); var array = Enum.GetValues(type); var index = random.Next(array.GetLowerBound(0), array.GetLowerBound(0)); return (T)array.GetValue(index); }
调用事例
enum Week { Monday = 1, TuesDay = 2, WndnesDay = 3, ThurDay = 4, FriDay = 5, SaturDay = 6, SunDay = 0 } Random random = new Random(); Console.WriteLine(random.NextEnum<Week>());
相关语法看不懂,我就不解释了。
Enum:byte的扩展
public static byte[] NextBytes(this Random random, int length) { //question:NextBytes这个方法和Random 对象自带的方法是一样,会不会报错? //questio:最大的byte是多少,这个不知道自己打脸,真心要打脸 var result =new byte[length]; random.NextBytes(result); // 用随机数填充指定字节数组的元素。参数result:一个byte数组,不断往里面填充byte 类型的数字 return result; } 调用: byte[] data = random.NextBytes(12);
Bool:bool的扩展
public static bool NextBool(this Random random) { return random.NextDouble() > 0.5; } 调用: Random rand = new Random(); Console.WriteLine(rand.NextBool());
字符串:符合正则的随机密码
var password = random.NextString(@"[0-9a-z]{6,12}"); var passwordSalt = random.NextString(@"[a-z0-9A-Z]{16}");
字符串的扩展(一个实际项目中的问题)
是这样的,在前端中经常有这样需求,将一个任务分配给多个人。这个时候会获取多个人的Id组成的字符串,所以在后端程序处理的时候,我们就要将这个字符串分割成Id重新复制成int 类型的Array.我是这样做的,希望有好的方法提出,虽然不是最好,但还是解决了一些问题
/// <summary> /// 字符串转化成int数组 /// </summary> /// <param name="arrayParmeter">具有分割符的字符串</param> /// <param name="c">分割符</param> /// <returns>success:返回元祖<list,true>,,error:<null,false></returns> public static Tuple<int[],bool> StringParseArrayInt(this string strParmeter,char c) { Tuple<int[], bool> ret = null; List<int> list = new List<int> (); string[] arrayStr = strParmeter.Split(c); try{ foreach (string item in arrayStr) { int temp = 0; int.TryParse(item, out temp); list.Add(temp); } } catch { ret = new Tuple<int[], bool>(null, false); return ret; } ret = new Tuple<int[], bool>(list.ToArray(),true); return ret; }
希望大家多提点意见,谢谢了
C#扩展(2):Random的扩展的更多相关文章
- Asp.net 面向接口可扩展框架之“Mvc扩展框架及DI”
标题“Mvc扩展框架及DI”有点绕口,我也想不出好的命名,因为这个内容很杂,涉及多个模块,但在日常开发又密不可分 首先说Mvc扩展框架,该Mvc扩展就是把以前的那个Mvc分区扩展框架迁移过来,并优化整 ...
- win10 64位安装memcache扩展和开启redis扩展
前面有关于win10下搭建wamp环境的介绍,在此不在赘述,php操作memcache有memcache库和memcached库,其中memcache是php内置的扩展库,支持面向对象和面向过程两种操 ...
- PHP5不重新编译,如何安装自带的未安装过的扩展,如soap扩展?
在虚拟机的CentOS5.5中,一键安装了PHP运行环境,但发现并没有 soap 扩展,而近期项目用需要用到 webservice. 上述的一键安装(lamp0.4),其实是源码编译安装,PHP配置文 ...
- PHP扩展编写、PHP扩展调试、VLD源码分析、基于嵌入式Embed SAPI实现opcode查看
catalogue . 编译PHP源码 . 扩展结构.优缺点 . 使用PHP原生扩展框架wizard ext_skel编写扩展 . 编译安装VLD . Debug调试VLD . VLD源码分析 . 嵌 ...
- Chrome扩展开发之一——Chrome扩展的文件结构
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- 【小结】有关mysql扩展库和mysqli扩展库的crud操作封装
现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库 面向过程操作 2.mysqli扩展库 面向对象操作和面向过程操作并存 安全性和效率高于mysql扩展库 ...
- 面向接口可扩展框架之“Mvc扩展框架及DI”
面向接口可扩展框架之“Mvc扩展框架及DI” 标题“Mvc扩展框架及DI”有点绕口,我也想不出好的命名,因为这个内容很杂,涉及多个模块,但在日常开发又密不可分 首先说Mvc扩展框架,该Mvc扩展就是把 ...
- JS扩展 或 Jquery的扩展写法
<script>//JS扩展String函数test,其它类推String.prototype.test = function(s){ alert(this+s);}var str = ' ...
随机推荐
- 《java.util.concurrent 包源码阅读》21 CyclicBarrier和CountDownLatch
CyclicBarrier是一个用于线程同步的辅助类,它允许一组线程等待彼此,直到所有线程都到达集合点,然后执行某个设定的任务. 现实中有个很好的例子来形容:几个人约定了某个地方集中,然后一起出发去旅 ...
- npm模块管理器入门
什么是 NPM npm 是 Node 官方提供的包管理工具,他已经成了 Node 包的标准发布平台,用于 Node 包的发布.传播.依赖控制.npm 提供了命令行工具,使你可以方便地下载.安装.升级. ...
- 【JDK1.8】JDK1.8集合源码阅读——TreeMap(二)
一.前言 在前一篇博客中,我们对TreeMap的继承关系进行了分析,在这一篇里,我们将分析TreeMap的数据结构,深入理解它的排序能力是如何实现的.这一节要有一定的数据结构基础,在阅读下面的之前,推 ...
- 京东分布式缓存redis应用实战
互联网应用特点三高:高并发.高可用.高性能,要达到这几个目标,好的方法方式是建立相应指标, 来进行准确描述,有了准确指标进行监控,方能易于实现我们设定目标. 先将指标介绍下,方便下面相关术语使用,qp ...
- 算法帖——用舞蹈链算法(Dancing Links)求解俄罗斯方块覆盖问题
问题的提出:如下图,用13块俄罗斯方块覆盖8*8的正方形.如何用计算机求解? 解决这类问题的方法不一而足,然而核心思想都是穷举法,不同的方法仅仅是对穷举法进行了优化 用13块不同形状的俄罗斯方块(每个 ...
- azure备份虚拟机
备份 azure虚拟机 提前创建了一个linux虚拟机,位置是chinaeast. 如果我们需要备份的虚拟机分别在中国东部和北部,那么需要在两个位置都创建备份库. 创建库 登录经典门户,新建-> ...
- 14. 监视ZooKeeper实例
ZooKeeper服务可以通过以下两种方式进行监控: 使用一组四个字母的单词命令来监视健康状态 使用ZooKeeper内置的Java管理扩展功能 四个字母的单词命令 ZooKeeper响应一组命令,每 ...
- 谈谈微服务中的 API 网关(API Gateway)
前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...
- Linux服务器病毒清理实践
背景:客户服务器被挂载木马病毒用以挖矿(比特币). 本次清理通过Linux基本命令完成.其原理也比较简单,通过ps命令查看服务器异常进程,然后通过lsof命令定位进程访问的文件,找到异常文件删除之,最 ...
- 51Nod--1085背包问题
1085 背包问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整 ...