当前位置: 首页 > news >正文

[转载]最简单的.NET生成随机数

众所周知 .Net中Random类生成的随机数是假随机数,关键要看构造函数里的种子
如果你做个实验
1 for ( int i = 0 ; i < 100 ; i ++ )
2 {
3 Console.WriteLine(new Random(i).Next());
4 }
就会看到很有规律的一串数

许多人想到时间,DateTime.Now.Ticks,首先这个属性是long,与Random构造函数的参数不符,你需要做一定处理,而且在机器很快的情况下,短时间内这个数字不会有变化,生成的“随机数”也就都是一样的。于是网上介绍的许多方法会用Ticks相乘、或者乘以i等做一些处理,让这个种子看上去随机一些,不过还是显得麻烦。

其实,在.Net中,说道随机,最先想到的就是Guid.NewGuid(),但Guid是Guid的格式,怎么转换成你自己的格式呢?

HashCode!

.Net中,所有类继承于object,而所有的object都会有Equals()和GetHashCode()两个方法,而GetHashCode()的返回值,正是Random类构造函数所需要的int,这么方便的东西,我们当然要利用一下,所以,很容易写下了如下代码。

1 static string GetCode( int num)
2 {
3string a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
4 StringBuilder sb = new StringBuilder();
5for(int i = 0; i < num; i++)
6{
7 sb.Append(a[new Random(Guid.NewGuid().GetHashCode()).Next(0, a.Length -1)]);
8 }

9
10return sb.ToString();
11}

 

 文章转载自:http://www.cnblogs.com/Mirricle/archive/2008/06/02/1212003.html

转载于:https://www.cnblogs.com/babycool/archive/2012/03/25/2416447.html

相关文章:

  • 用原生JS进行CSS格式化和压缩
  • EXT.NET高效开发(四)——实用技巧
  • js 基础
  • 免费空间域名,简易免费安装百科网站教程!!!
  • 函数的弹性设计
  • 常见100个管理学定律
  • flexigrid
  • 内核开发基础——'make menuconfig' requires the ncurses libraries
  • COJ 1156 Switching bulbs
  • 配置Struts 2应用程序的安全功能
  • 程序猿的执业修养(四)——全力以赴,做到最好
  • 复杂报表中向上扩展
  • onMouseOut事件冒泡的问题解决
  • extjs 如何将局部的变量变为全局变量
  • ASP.net的身份验证方式FORMS
  • [LeetCode] Wiggle Sort
  • Apache Spark Streaming 使用实例
  • JavaScript学习总结——原型
  • java小心机(3)| 浅析finalize()
  • JDK9: 集成 Jshell 和 Maven 项目.
  • nginx 配置多 域名 + 多 https
  • Objective-C 中关联引用的概念
  • python学习笔记-类对象的信息
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue--数据传输
  • 爱情 北京女病人
  • 从0实现一个tiny react(三)生命周期
  • 分类模型——Logistics Regression
  • 关于extract.autodesk.io的一些说明
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 坑!为什么View.startAnimation不起作用?
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 容器服务kubernetes弹性伸缩高级用法
  • 用element的upload组件实现多图片上传和压缩
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #if和#ifdef区别
  • #pragma once与条件编译
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (分布式缓存)Redis哨兵
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (四)JPA - JQPL 实现增删改查
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (译)2019年前端性能优化清单 — 下篇
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .Net CF下精确的计时器
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 中创建支持集合初始化器的类型
  • .NET 中让 Task 支持带超时的异步等待
  • .NET中统一的存储过程调用方法(收藏)
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [100天算法】-x 的平方根(day 61)