在.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;
        }

希望大家多提点意见,谢谢了

最新文章

  1. Selenium VS QTP
  2. mysql 添加字段、删除字段、调整字段顺序 转
  3. PHP CI分页类带多个参数
  4. 编程实现LINUX下目录的层层遍历
  5. 【同行说技术】Android图片处理技术资料汇总(一)
  6. Android JNI之C/C++层调用JAVA
  7. 手机看youtube的方法|一个好用的VPN
  8. 函数buf_LRU_block_remove_hashed_page
  9. uva 11997 K Smallest Sums 优先队列处理多路归并问题
  10. 【HDOJ】1239 Calling Extraterrestrial Intelligence Again
  11. 【Java】通过DES加密和解密工具,对字符串进行加密和解密操作
  12. Android应用连接代理服务器状况监测解决
  13. c语言for语句
  14. sass教程
  15. 实现RGB,CMY(K),YUV,YIQ,YCbCr颜色的转换算法
  16. 201521123108 《Java程序设计》第11周学习总结
  17. linux_Nginx日志
  18. Vscode下的Markdown的基本使用
  19. 【Window Power Shell】介绍与使用
  20. CF438E The Child and Binary Tree(生成函数,NTT)

热门文章

  1. 《java.util.concurrent 包源码阅读》07 LinkedBlockingQueue
  2. 微信公众号 Cookie
  3. C语言之二分猜数字游戏
  4. 用C语言画一个心
  5. 利用python对excel进行数据剔除
  6. zzuli 2130: hipercijevi 链式前向星+BFS+输入输出外挂
  7. zzuli 1815: easy problem 打表
  8. php+jQuery+Mysql找回密码----ThinkPHP
  9. C# TreeView设置SelectedNode设置无效的问题
  10. day2、Linux别名