C# 随机数帮助类
用到拆箱装箱,有没有更好的办法,欢迎在底部留言。。
class RandomHelper
{
public static T GetRandom<T>()
{
try
{
Random random = new Random(GetSeed());
Type curType = typeof(T);
object obj = null;
if (curType == typeof(int))
{
obj = random.Next();
}
else if (curType == typeof(bool))
{
obj = random.Next(0, 2) % 2 == 0;
}
else if (curType == typeof(double))
{
obj = random.NextDouble();
}
else
{
return default;
}
return (T)obj;
}
catch (Exception)
{
return default;
}
}
public static T GetRandom<T>(int len)
{
try
{
Random random = new Random(GetSeed());
Type curType = typeof(T);
object obj = null;
if (curType == typeof(byte[]))
{
byte[] buf = new byte[len];
random.NextBytes(buf);
obj = buf;
}
else if (curType == typeof(string))
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++)
{
sb.Append(Encoding.ASCII.GetString(new byte[] { (byte)random.Next(33, 126) }));
}
obj = sb.ToString();
}
else
{
return default;
}
return (T)obj;
}
catch (Exception)
{
return default;
}
}
public static int GetRandom(int min, int max)
{
Random random = new Random(GetSeed());
return random.Next(min, max);
}
public static int GetSeed()
{
byte[] buf = new byte[4];
using (System.Security.Cryptography.RNGCryptoServiceProvider ragCSP = new System.Security.Cryptography.RNGCryptoServiceProvider())
{
ragCSP.GetBytes(buf);
return BitConverter.ToInt32(buf, 0);
}
}
}