次のことを行わずに、簡単な方法で500文字を生成したいと思います。
String range = "0123456789101112131415...";
500文字の正確な文字列が必要です。
どうやってやるの?
Enumerable.Range(0,500).Select( c => c.ToString());
役に立たないので
数123は1ではなく3文字であり、そこに問題があります。
どの文字を気にしない場合は、Stringコンストラクターを使用できます。
String s = new String('0', 500);
これにより、500個の「0」の文字列が得られます。または500Xの場合:
String s = new String('X', 500);
Aggregateを使用したい:
string range = Enumerable.Range(0,500)
.Select(x => x.ToString()).Aggregate((a, b) => a + b);
Console.WriteLine(range);
これにより、0から500までの連結された数値の文字列が得られます。このように:01234567891011121314151617...
この大きな文字列から500文字を取得する必要がある場合は、さらに部分文字列を使用できます。
string range = Enumerable.Range(0,500)
.Select(x => x.ToString()).Aggregate((a, b) => a + b);
Console.WriteLine(range.Substring(0, 500));
これでうまくいくはずです。
var range = new string(String.Concat(Enumerable.Range(0, 500)
.Select(c => c.ToString()))
.Take(500).ToArray()
);
LINQは気の利いたものですが、必ずしも必要なわけではありません...:
static string NumString(int length) {
var s = "";
var i = 0;
while (s.Length < length) {
s += i.ToString();
i++;
}
return s.Substring(0, length);
}
または、Aggregateを使用するバリアント:
var str = Enumerable.Range(0, 500)
.Aggregate("", (s, next) => s += next.ToString(),
s => s.Substring(0, 500));
new string(Enumerable.Range(0,500).SelectMany(x => x.ToString()).Take(500).ToArray())
LINQを使用した最も簡単な方法。文字列は技術的には列挙可能(char [])であるため、SelectMany(複数のEnumerableを取得して単一のコレクションにフラット化)に続いてTake(500)を使用して500文字のみを取得し、ToArrayを呼び出してchar[]を取得できます。新しい文字列をインスタンス化します。
もう1つのオプションは、元の質問から要求された出力ではなく、数字は増加するのではなくランダムですが、かなり簡潔です(OPはランダムな数字の文字列を必要としませんでしたが、いずれの場合もここにあります)。
var rand = new Random();
string.Join("",Enumerable.Repeat(0, 500).Select(i => rand.Next(10)));