を反復する限り、任意の数の乱数の合計を返すきちんとした小さなメソッドを次に示しIEnumerable
ます。
public IEnumerable<int> Twist(int min, int max) {
Random random = new Random();
int result = 0;
while (true) {
result += random.Next(min, max); // overflow pretty likely for large max
System.Diagnostics.Debug.WriteLine(result);
yield return result;
}
}
// For a single element
int oneResult = Twist(1, 5).First();
// For the fifth
int fifth = Twist(1, 5).Skip(4).First();
そして、イテレーションを延期したい場合は、自分で素敵な拡張メソッドを定義してください。
public static class EnumeratorExt {
public static T Next<T> (this IEnumerator<T> seq) {
if (seq.MoveNext()) {
return seq.Current;
}
return default(T);
}
}
// Now call it like so!
using (var generator = Twist(5, 10).GetEnumerator()) {
Console.WriteLine(generator.Next());
Console.WriteLine(generator.Next());
Console.WriteLine(generator.Next());
Console.WriteLine(generator.Next());
}