【发布时间】:2015-08-23 19:18:01
【问题描述】:
在我的 c# 代码中,我有一个静态方法。这是代码示例:
public class RandomKey
{
public static string GetKey()
{
Random rng = new Random();
char[] chars = new char[8];
for (int i = 0; i < chars.Length; i++)
{
int v = rng.Next(10 + 26 + 26);
char c;
if (v < 10)
{
c = (char)('0' + v);
}
else if (v < 36)
{
c = (char)('a' - 10 + v);
}
else
{
c = (char)('A' - 36 + v);
}
chars[i] = c;
}
string key = new string(chars);
key += DateTime.Now.Ticks.ToString();
return key;
}
}
我从另一个类的方法调用这个函数。
Class SomeClass
{
Void SomeMethod()
{
for(int i=0; i<100; i++)
{
System.Diagnostics.Debug.WriteLine(i + "===>" + RandomKey.GetKey());
}
}
}
但现在的问题是有时我会从静态方法获得相同的输出,尽管该函数是单独调用的。我的代码有问题吗?
【问题讨论】:
-
在静态方法之外声明 Random()
-
当你对
Random()使用无参数构造函数时,它使用Environment.TickCount作为种子,它每隔几毫秒就会改变一次。因此,如果您调用得太快,您最终会得到使用相同种子构造的连续实例,因此会产生相同的随机数序列。 -
@MatthewWatson :您的评论比发布的答案更好。你应该回答而不是评论;)
-
@falan 正确的方法是关闭为重复
-
@Falanwe:您认为哪种方式更好?我已经在我的回答中解释了这个问题(我承认细节较少)并提出了一个解决方案(马修的评论没有。)。那么,是什么让它变得更好呢?
标签: c# static-methods