曾经许多时候,需要随机生成一些东西,结果还得慢慢用那个.NET Framework中的Random类。后来为此麻烦自己慢慢写一个更方便的多功能Random类型,取名MyRandom,今天把它分享出来。
这个类的所有成员都是静态的,主要为了方便调用。当然如果你想对它生成多个实例,可以把所有static关键字去掉。
其次这个类就是对.NET中预定义的Random类的封装,所以一些Random类型不适合的地方此类同样会不适合,比如对安全强度需要很高的密码随机数生成,最好使用System.Security.Cryptography命名空间提供的RandomNumberGenerator类型。
对于.NET中的Random类型有的方法,此类型都有相应支持,比如提供种子,随机生成int, double, byte数组。下面就讲MyRandom这个类提供的其他更全面的方法。
字符串相关操作
示例代码:
//随机生成11位数字
string str1 = MyRandom.String(StringRange.Digit, 11);
Console.WriteLine(str1);
//随机生成5位小写字母
string str2 = MyRandom.String(StringRange.Letter, 5).ToLower();
Console.WriteLine(str2);
//随机从指定字符串中生成10位字符数组
char[] chars = MyRandom.CharArray("Mgen!", 10);
Console.WriteLine(new string(chars));
//随机从字符串中返回一个字符
char c = MyRandom.CharFromString("Mgen");
Console.WriteLine(c);
可能的一种输出:
76593373627
qfdrt
gngeMgnM!!
g
数组相关操作
示例代码:
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//随机返回数组中的一个成员
int i1 = MyRandom.ArrayMember(arr);
Console.WriteLine(i1);
//随机返回数组指定范围内的一个成员
int i2 = MyRandom.ArrayMember(arr, 2, 3);
Console.WriteLine(i2);
//根据指定数组的范围随机返回一个指定长度的新数组
//变量newArray1长度为5,成员都是arr变量中随机的成员
int[] newArray1 = MyRandom.ArrayFixedSegment(arr, 5);
Console.WriteLine(string.Join(", ", newArray1));
//根据指定数组的范围随机返回一个动态长度的新数组
//变量newArray2数组长度是随机的(1到10范围内),数组成员是arr数组前三个成员中随机的一个
int[] newArray2 = MyRandom.ArrayDynamicSegment(arr, 0, 3, 10, 1);
Console.WriteLine(string.Join(", ", newArray2));
//随机填充一个字节(或整数)数组
byte[] bytes = new byte[10];
MyRandom.ByteArray(bytes);
Console.WriteLine(BitConverter.ToString(bytes));
//随机返回一个字节(或整数)数组
var bytes2 = MyRandom.ByteArray(5);
Console.WriteLine(BitConverter.ToString(bytes2));
可能的一种输出:
5
5
8, 3, 5, 6, 4
1, 2, 3, 3, 1, 2, 3, 2, 1, 2
3C-90-95-AB-65-8F-6B-5F-4F-1F
50-B2-A9-F4-78
枚举相关操作
示例代码:
//随机生成枚举值
for (int i = 0; i < 3; i++)
{
Environment.SpecialFolder sf = MyRandom.Enumeration<Environment.SpecialFolder>();
Console.WriteLine(sf);
}
可能的输出:
DesktopDirectory
ProgramFiles
LocalApplicationData
循环相关操作
示例代码:
//随机执行1-5次操作
MyRandom.Action(() => Console.WriteLine("操作1"), 5);
//随机执行0-3次操作(带有索引值)
MyRandom.Action((idx) => Console.WriteLine("操作2,当前是第{0}个", idx), 3, 0);
//随机执行2-4次操作(带有索引值,带有总共次数)
MyRandom.Action((idx, total) => Console.WriteLine("操作3,当前是第{0}个,总共{1}个", idx, total), 4, 2);
可能的输出:
操作1
操作1
操作2,当前是第0个
操作2,当前是第1个
操作3,当前是第0个,总共3个
操作3,当前是第1个,总共3个
操作3,当前是第2个,总共3个
源代码下载
当前版本的程序和源代码下载
下载地址注意:此为微软SkyDrive存档,请用浏览器直接下载,用某些下载工具可能无法下载
文件类型:.cs文件