乱数を生成するには System.Random クラスを使用します。
乱数の生成方法(数値)
範囲指定ありusing System;
var rand = new Random();
乱数値(最小値 ~ 最大値 - 1) = rand.Next(最小値, 最大値);
乱数値(最小値 ~ 最大値 - 1) = rand.Next(最小値, 最大値);
乱数値(最小値 ~ 最大値 - 1) = rand.Next(最小値, 最大値);
- Next() メソッドを呼ぶたびに乱数が返されます。
- 最小値と最大値は -2,147,483,648 ~ 2,147,483,647 の範囲で指定可能です。
- -10 ~ 10 の乱数を生成したい場合は、Next(-10, 11); です。
- 戻り値は int 型です。
- 最小値と最大値が逆転していると、例外「System.ArgumentOutOfRangeException」が発生します。
using System;
var rand = new Random();
乱数値(0 ~ 2,147,483,647) = rand.Next();
乱数値(0 ~ 2,147,483,647) = rand.Next();
乱数値(0 ~ 2,147,483,647) = rand.Next();
- Next() メソッドの引数を省略すると、 0 ~ 2,147,483,647 を返します。マイナス値は返しません。
using System;
// Random クラスのインスタンス生成
var rand = new Random();
// 10回ループ
for (int i = 0; i < 10; i++)
{
// -10 ~ 9 の乱数を生成
int value = rand.Next(minValue: -10, maxValue: 10);
System.Console.WriteLine($"{value}");
}
- 4行目: Random クラスのインスタンスを生成しています。
- 10行目: -10 ~ 9 の乱数を生成しています。※ -10 ~ 10 の誤りではありません。

乱数の生成方法(浮動小数点数)
using System;
var rand = new Random();
乱数値(0 ~ 0.99999999999999978) = rand.NextDouble();
乱数値(0 ~ 0.99999999999999978) = rand.NextDouble();
乱数値(0 ~ 0.99999999999999978) = rand.NextDouble();
- 浮動小数点数の乱数を生成するには、NextDouble メソッドを使用します。
- Next メソッドでは範囲指定が可能でしたが、NextDouble メソッドではできません。
- 戻り値は double 型です。
using System;
// Random クラスのインスタンス生成
var rand = new Random();
// 10回ループ
for (int i = 0; i < 10; i++)
{
// 0 ~ 0.99999999999999978 の乱数を生成
double value = rand.NextDouble();
System.Console.WriteLine($"{value}");
}
- 4行目: Random クラスのインスタンスを生成しています。
- 10行目: 0 ~ 0.99999999999999978 の乱数が生成されます。

常に同じ乱数を生成する(シード値の指定)
Random クラスの new 時に任意の数(シード値)を渡すと、同じ乱数が返されます。using System;
var rand = new Random(任意の数);
- 乱数を初期化するための数は、シード値(seed)と呼ばれます。
using System;
// 同じシード値でクラスを初期化
var rand1 = new Random(Seed: 10);
var rand2 = new Random(Seed: 10);
// どちらも 2041175501 を返す
int value1 = rand1.Next();
int value2 = rand2.Next();
System.Console.WriteLine($"1回目");
System.Console.WriteLine($"value1 = {value1}");
System.Console.WriteLine($"value2 = {value2}");
// どちらも 1613858733 を返す
value1 = rand1.Next();
value2 = rand2.Next();
System.Console.WriteLine($"2回目");
System.Console.WriteLine($"value1 = {value1}");
System.Console.WriteLine($"value2 = {value2}");
- 4・5行目: 同一のシード値で Random クラスを生成しています。
- 8・9行目: どちらも 2041175501 を返します。
- 15・16行目: どちらも 1613858733 を返します。

検証環境
- .NET 5.0
- Microsoft Visual Studio Professional 2019 Version 16.9.3
- Microsoft Windows 10 Pro Version 20H2 OS Build 19042.906 Experience: Windows Feature Experience Pack 120.2212.551.0