5

1 から 200 までの数字のリストを生成する超簡単な方法を探しています。(それはリスト、配列、列挙可能にすることができます...特定のタイプはあまり気にしません)

どうやら.Net 4.0にはSequence.Range(min,max)メソッドがあります。しかし、私は現在.Net 3.5を使用しています。

これは、Sequence.Range で示されている、私が求めているものの使用例です。

public void ShowOutput(Sequence.Range(1,200));

今のところ、1 から 200 までの連番が必要です。将来の反復では、任意の数値リストが必要になる可能性があるため、設計を柔軟に保つようにしています。

おそらく、良いLINQソリューションがありますか? 他のアイデアはありますか?

4

3 に答える 3

16

.NET 3,5 にもありRangeます。それは実際にEnumerable.Rangeあり、戻りますIEnumerable<int>

リンク先のページは非常に古くなっています.3を「将来のバージョン」として話しており、Enumerable静的クラスはSequenceリリース前のある時点で呼び出されました.

C# 2 以降で自分で実装したい場合は、簡単です。

IEnumerable<int> Range(int count)
{
    for (int n = 0; n < count; n++)
        yield return n;
}

リストをさらにフィルタリングする他のメソッドを簡単に作成できます。

IEnumerable<int> Double(IEnumerable<int> source)
{
    foreach (int n in source)
        yield return n * 2;
}

ただし、3.5 を使用しているため、拡張メソッドを使用System.Linq.Enumerableしてこれを行うことができます。

var evens = Enumerable.Range(0, someLimit).Select(n => n * 2);
于 2009-07-28T21:29:58.387 に答える
6
var r = Enumerable.Range( 1, 200 );
于 2009-07-28T21:30:20.883 に答える
3

System.Linq.Enumerable.Rangeを確認してください。

質問の 2 番目の部分について、「任意のリスト」とはどういう意味ですか? から新しい値への関数を定義できる場合intは、Range の結果を他の LINQ メソッドで使用できます。

var squares = from i in Enumerable.Range(1, 200)
              select i * i;
于 2009-07-28T21:30:24.970 に答える