Joe*_*orn 224
private Random gen = new Random();
DateTime RandomDay()
{
DateTime start = new DateTime(1995, 1, 1);
int range = (DateTime.Today - start).Days;
return start.AddDays(gen.Next(range));
}
Run Code Online (Sandbox Code Playgroud)
为了获得更好的性能,如果重复调用它,请在函数外部创建start和gen(甚至可能range)变量.
Jar*_*Par 23
这是对Joel关于制作更优化版本的评论的轻微回应.为什么不返回可以重复调用以创建随机日期的生成器函数,而不是直接返回随机日期.
Func<DateTime> RandomDayFunc()
{
DateTime start = new DateTime(1995, 1, 1);
Random gen = new Random();
int range = ((TimeSpan)(DateTime.Today - start)).Days;
return () => start.AddDays(gen.Next(range));
}
Run Code Online (Sandbox Code Playgroud)
我已经采取了@Joel Coehoorn的回答并做出了他所建议的改变 - 将变量放在方法之外并将所有内容都放在课堂上.此外,现在时间也是随机的.这是结果.
class RandomDateTime
{
DateTime start;
Random gen;
int range;
public RandomDateTime()
{
start = new DateTime(1995, 1, 1);
gen = new Random();
range = (DateTime.Today - start).Days;
}
public DateTime Next()
{
return start.AddDays(gen.Next(range)).AddHours(gen.Next(0,24)).AddMinutes(gen.Next(0,60)).AddSeconds(gen.Next(0,60));
}
}
Run Code Online (Sandbox Code Playgroud)
并举例说明如何使用100个随机DateTimes来控制:
RandomDateTime date = new RandomDateTime();
for (int i = 0; i < 100; i++)
{
Console.WriteLine(date.Next());
}
Run Code Online (Sandbox Code Playgroud)
好吧,如果你要提出备用优化,我们也可以选择迭代器:
static IEnumerable<DateTime> RandomDay()
{
DateTime start = new DateTime(1995, 1, 1);
Random gen = new Random();
int range = ((TimeSpan)(DateTime.Today - start)).Days;
while (true)
yield return start.AddDays(gen.Next(range));
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
int i=0;
foreach(DateTime dt in RandomDay())
{
Console.WriteLine(dt);
if (++i == 10)
break;
}
Run Code Online (Sandbox Code Playgroud)