如何获得IEnumerable
个随机值?我很失望课程Random没有实现IEnumerable<int>
。
答案 0 :(得分:8)
编写扩展方法,yield return
新值。
public static IEnumerable<int> GetRandomValues(this Random instance)
{
while(true)
{
yield return instance.Next();
}
}
答案 1 :(得分:3)
您可以相当轻松地自行实现,例如
public IEnumerable<int> RandomInts(int below)
{
Random r = new Random();
while (true) yield return r.Next(below);
}
答案 2 :(得分:1)
为Random类设置IEnumerable<int>
实例的一些问题点是
foreach
构造或元素上的循环将永远不会终止。IEnumerator<int>
的{{1}}应返回的getEnumerator
实例具有函数IEnumerable<int>
,该函数将枚举数重置为集合的开头。假设行为正确,则应返回第一个生成的随机数,就像过去生成的一样。最后一个问题至少可以通过两种方式解决,
Reset
时,可以使用前一种子实例化新生成器。应隐藏Random的所有其他随机生成方法,以防止被访问。由于簿记方法不是很好,我会选择第二个版本。这是一个相当大的课程,如下所示。
Reset