Enumerable.Range(1, 10) で小数点を作りたい(0.1, 0.2, ..., 1.0)場合、どうやるの?

Enumerable.Range()intのシーケンスを返しますよね。これのdouble型をやるにはどうするの?という疑問に、専用のRange()オーバーロードがあるのかと思いきや無かったので、備忘録です。

各命令と出力結果は、LINQPad の動作結果のコピペです。

目次

int の場合

これは普段通り。

// 1..10
var seq1 = Enumerable.Range(1, 10).Dump();
IEnumerable<Int32> (10 items)
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

double の場合1

double 型にキャストしたところで、1~10 までと変わらんやんけ。と気が付きました。頭が良いので。

// 1.0, 2.0, ..10.0
var seq2 = Enumerable.Range(1, 10).Select(x => (double)x).Dump();
IEnumerable<Double> (10 items)
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

double の場合2

で、掛け算して小さくして作るのか、と分かりました。

// 0.1, 0.2, ... 1.0
var seq3 = Enumerable.Range(1, 10).Select(x => x * 0.1).Dump();
IEnumerable<Double> (10 items)
0.1 
0.2 
0.3 
0.4 
0.5 
0.6 
0.7 
0.8 
0.9 
1