在.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的扩展的更多相关文章

  1. Asp.net 面向接口可扩展框架之“Mvc扩展框架及DI”

    标题“Mvc扩展框架及DI”有点绕口,我也想不出好的命名,因为这个内容很杂,涉及多个模块,但在日常开发又密不可分 首先说Mvc扩展框架,该Mvc扩展就是把以前的那个Mvc分区扩展框架迁移过来,并优化整 ...

  2. win10 64位安装memcache扩展和开启redis扩展

    前面有关于win10下搭建wamp环境的介绍,在此不在赘述,php操作memcache有memcache库和memcached库,其中memcache是php内置的扩展库,支持面向对象和面向过程两种操 ...

  3. PHP5不重新编译,如何安装自带的未安装过的扩展,如soap扩展?

    在虚拟机的CentOS5.5中,一键安装了PHP运行环境,但发现并没有 soap 扩展,而近期项目用需要用到 webservice. 上述的一键安装(lamp0.4),其实是源码编译安装,PHP配置文 ...

  4. PHP扩展编写、PHP扩展调试、VLD源码分析、基于嵌入式Embed SAPI实现opcode查看

    catalogue . 编译PHP源码 . 扩展结构.优缺点 . 使用PHP原生扩展框架wizard ext_skel编写扩展 . 编译安装VLD . Debug调试VLD . VLD源码分析 . 嵌 ...

  5. Chrome扩展开发之一——Chrome扩展的文件结构

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  6. Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  7. 【小结】有关mysql扩展库和mysqli扩展库的crud操作封装

    现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库   面向过程操作 2.mysqli扩展库  面向对象操作和面向过程操作并存  安全性和效率高于mysql扩展库 ...

  8. 面向接口可扩展框架之“Mvc扩展框架及DI”

    面向接口可扩展框架之“Mvc扩展框架及DI” 标题“Mvc扩展框架及DI”有点绕口,我也想不出好的命名,因为这个内容很杂,涉及多个模块,但在日常开发又密不可分 首先说Mvc扩展框架,该Mvc扩展就是把 ...

  9. JS扩展 或 Jquery的扩展写法

    <script>//JS扩展String函数test,其它类推String.prototype.test = function(s){ alert(this+s);}var str = ' ...

随机推荐

  1. android TransFormexecption 解决

    近期编译的时候遇到这个问题.... > com.android.build.api.transform.Transformexception: java.util.zip.ZipExceptio ...

  2. C++11 标准新特性: 右值引用与转移语义

    文章出处:https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ 新特性的目的 右值引用 (Rvalue Referene) ...

  3. HDU 2795 Billboard 线段树,区间最大值,单点更新

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. Spring Cloud 前后端分离后引起的跨域访问解决方案

    背景 Spring Cloud 微服务试点改造,目前在尝试前后端分离. 前台A应用(本机8080端口),通过网管(本机8769端口)调用后台应用B(本机8082端口).应用C发布的http服务.. A ...

  5. 小白的Python之路 day1

    Python之路,Day1 - Python基础1 本节内容 Python介绍 发展史 Python 2 or 3? 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van ...

  6. day2-Python基本数据类型介绍

    百度云连接 链接:https://pan.baidu.com/s/1hsGQx7m 密码:u07q

  7. php的过滤器功能

    1.简介 PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入. 1.1 外部数据: 来自表单的输入数据 Cookies Web services data 服务器变量 数据库查询结果 1 ...

  8. 关于前端框架BootStrap和JQueryUI(以及相应的优秀模板)

    近期两个月因为须要升级公司产品的界面.所以不得不去学习了下原本并不熟悉的前端框架. 这里也是推荐两款BootStrap和JQueryUI. bootstrap使用起始非常easy,首先.须要得到所须要 ...

  9. Linux已经全然统治了这个世界:反对开源社区愚不可及

    原文来自:http://readwrite.jp/archives/9977 不管一个企业多强大,它都不存在和开源社区抗衡的实力 十年前.Unix占有最快的计算机世界排名前10位的五席,以及超级计算机 ...

  10. UVA 540(队列)

    Description  Team Queue  Queues and Priority Queues are data structures which are known to most comp ...