@avance70。元の質問への回答ではありませんが、1 つの整数値を持つ IEnumerable に関する avance70 の質問への回答です。コメントとして追加したかったのですが、コメントを追加するのに十分な担当者がいません。厳密に不変のシーケンスに関心がある場合は、いくつかのオプションがあります。
一般的な拡張方法:
public static IEnumerable<T> ToEnumerable<T>(this T item)
{
yield return item;
}
次のように使用します。
foreach (int i in 10.ToEnumerable())
{
Debug.WriteLine(i); //Will print "10" to output window
}
またはこれ:
int x = 10;
foreach (int i in x.ToEnumerable())
{
Debug.WriteLine(i); //Will print value of i to output window
}
またはこれ:
int start = 0;
int end = 100;
IEnumerable<int> seq = GetRandomNumbersBetweenOneAndNinetyNineInclusive();
foreach (int i in start.ToEnumerable().Concat(seq).Concat(end.ToEnumerable()))
{
//Do something with the random numbers, bookended by 0 and 100
}
最近、上記の開始/終了の例のようなケースがありました。ここでは、シーケンスから連続する値を「抽出」し (Skip と Take を使用)、開始値と終了値を前に追加して追加する必要がありました。開始値と終了値は、最後の抽出されていない値と最初に抽出された値の間 (開始の場合)、および最後に抽出された値と最初の抽出されていない値の間 (終了の場合) で補間されます。結果として得られたシーケンスは、おそらく逆に、再び操作されました。
したがって、元のシーケンスが次のように見える場合:
1 2 3 4 5
3 と 4 を抽出し、2 と 3、4 と 5 の間の補間値を追加する必要がある場合があります。
2.5 3 4 4.5
Enumerable.Repeat。次のように使用します。
foreach (int i in Enumerable.Repeat(10,1)) //Repeat "10" 1 time.
{
DoSomethingWithIt(i);
}
もちろん、これらは IEnumerable であるため、他の IEnumerable 操作と組み合わせて使用することもできます。これらが本当に「良い」アイデアかどうかはわかりませんが、仕事を成し遂げるはずです。