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 = ' ...
随机推荐
- python实战===如何优雅的打飞机
这是一个打飞机的游戏,结构如下: 其中images中包含的素材为 命名为alien.png 命名为ship.png 游戏效果运行是这样的: 敌军,也就是体型稍微大点的,在上方左右移动,并且有规律 ...
- C++ 将汉字转换成拼音全拼
#include <string> using std::string; //======================================================= ...
- SpringBoot+Redis环境搭建
写在正文前的絮叨: 其实这个环境的搭建是很简单的,照着官网给的说明很快就可以搭建测试出来.为什么又要写出来呢?只是为了记录.保留.分享这其中遇到的坑. 这个环境之前在架构一个简单系统时,也曾经搭建过, ...
- 邻里街坊 golang入坑系列
如果要追新或者怀旧,就点击https://andy-zhangtao.gitbooks.io/golang/content/ . 博客园里面的文章基本和gitbook上面是保持同步的. 这几天看了几集 ...
- ios多线程开发总结
1>无论使用哪种方法进行多线程开发,每个线程启动后并不一定立即执行相应的操作,具体什么时候由系统调度(CPU空闲时就会执行). 2>更新UI应该在主线程(UI线程)中进行,并且推荐使用同步 ...
- Numpy入门 - 行列式转置
本章实例讲解如何将一个数组对象进行转置,我们可以使用.T将行列数据颠倒过来,看下面的代码: import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6 ...
- Chrome浏览器读写系统剪切板
IE浏览器支持直接读写剪切板内容: window.clipboardData.clearData(); window.clipboardData.setData('Text', 'abcd'); 但是 ...
- java 事件处理
Java事件处理机制:EventObject类作为描述事件信息的事件信息类的基类,由EventListener接口派生新的接口或类来作为事件接收方的类,再定义事件源类. 事件信息类的构造方法必须含有事 ...
- this的取值
在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了. 情况1:构造函数 function Foo(){ this.name="王福朋" this ...
- Scala入门系列(十三):类型参数
引言 Scala中类型参数是什么呢?其实就类似于Java中的泛型.定义一种类型参数,比如在集合.类.函数中定义类型参数,然后就可以保证使用到该类型参数的地方就只能是这种类型,从而实现程序更好的健壮性. ...