1、
DateTime.Now.Ticks是指从1970年1月1日(具体哪年忘了哈,好像是1970)开始到目前所经过的毫秒数——刻度数。但是这与系统的日期有关,只要系统时间正确,就应该保证不重复
2、System.Guid.NewGuid().ToString()
3、 获得随机数,但不能保证不重复int
[] index =
new
int
[15];
for
(
int
i = 0; i < 15; i++)
index = i;
Random r =
new
Random();
//用来保存随机生成的不重复的10个数
int
[] result =
new
int
[10];
int
site = 15;
//设置下限
int
id;
for
(
int
j = 0; j < 10; j++)
{
id = r.Next(1, site - 1);
//在随机位置取出一个数,保存到结果数组
result[j] = index[id];
//最后一个数复制到当前位置
index[id] = index[site - 1];
//位置的下限减少一
site--;
}
方法2:利用Hashtable。
Hashtable hashtable =
new
Hashtable();
Random rm =
new
Random();
int
RmNum = 10;
for
(
int
i = 0; hashtable.Count < RmNum; i++)
{
int
nValue = rm.Next(100);
if
(!hashtable.ContainsValue(nValue) && nValue != 0)
{
hashtable.Add(nValue, nValue);
Console.WriteLine(nValue.ToString());
}
}
方法3:递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。
Random ra=
new
Random(
unchecked
((
int
)DateTime.Now.Ticks));
int
[] arrNum=
new
int
[10];
int
tmp=0;
int
minValue=1;
int
maxValue=10;
for
(
int
i=0;i<10;i++)
{
tmp=ra.Next(minValue,maxValue);
//随机取数
arrNum=getNum(arrNum,tmp,minValue,maxValue,ra);
//取出值赋到数组中
}
.........
.........
public
int
getNum(
int
[] arrNum,
int
tmp,
int
minValue,
int
maxValue,Random ra)
{
int
n=0;
while
(n<=arrNum.Length-1)
{
if
(arrNum[n]==tmp)
//利用循环判断是否有重复
{
tmp=ra.Next(minValue,maxValue);
//重新随机获取。
getNum(arrNum,tmp,minValue,maxValue,ra);
//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。
}
n++;
}
return
tmp;
}