1つの列挙型を作成する

If I want an empty enumeration, I can call Enumerable.Empty(). But what if I want to convert a scalar type to an enumeration?

Normally I'd write new List {myString} to pass myString to a function that accepts IEnumerable. Is there a more LINQ-y way?

5
@msarchet: EnumerableSystem.Linq 名前空間にあります。
追加された 著者 BoltClock,
より多くのLINQ-yがどういう意味ですか? LINQはクエリであり、何かを作成しています。 Enumerable!= linq
追加された 著者 msarchet,

4 答え

繰り返し を使用することができます:

var justOne = Enumerable.Repeat(value, 1);

もちろん、もちろんの配列:

var singleElementArray = new[] { value };

配列バージョンはもちろん変更可能ですが、 Enumerable.Repeat はそうではありません。

9
追加された
@ sq33G:それは匿名型を使用していません。それは暗黙のうちに型付けされた配列を使用しています。
追加された 著者 Jon Skeet,
シングルトンの匿名型の配列は、シングルトンよりもはるかにLINQierです。匿名のため、intのリスト!
追加された 著者 sq33G,
私の悪い。 LINQinessのテストではまだ単純なリストを打ち負かす。
追加された 著者 sq33G,

最短形式はおそらく

var sequence = new[] { value };
3
追加された

存在しますが、リストや配列を使うよりも効率が悪いです:

// an enumeration containing only the number 13.
var oneIntEnumeration = Enumerable.Repeat(13, 1);
3
追加された
リストや配列を使うよりも効率が悪いのはなぜですか?
追加された 著者 phoog,
私はあなたのブログ記事を本当に好きでした: blackrabbitcoder.net/BlackRabbitCoder/archive/2011/12/08/…
追加された 著者 TrueWill,
@phoog:実行速度だけでは、単一要素配列の構築はより高速です(ただし、非常に小さな差ですが)。つまり、 Enumerable.Repeat()には、読み込み専用のものを与えるという利点があります。
追加された 著者 James Michael Hare,
@phoog:百万の創作について var oneIntArray =新しいint [] {13}; は3ミリ秒、 var oneIntEnumeration = Enumerable.Repeat(13、1); は15ですms(私のマシン上ではいつも)。それでは、コールごとのマイナーな差はごくわずかで、たぶんマイクロ最適化にすぎません。私はあなたが一番好きなものを使っています。
追加された 著者 James Michael Hare,
@トルーウィル:ありがとう!
追加された 著者 James Michael Hare,

独自の拡張メソッドを記述することもできます。

public static class Extensions
{
    public static IEnumerable AsEnumerable(this T item)
    {
         yield return item;
    }
}

今私はそれをしていない、そして今私はEnumerableについて知っている。繰り返し、私は決して(毎日何か新しいことを学ぶ)決してないだろう。しかし、私はこれを持っている

public static IEnumerable MakeEnumerable(params T[] items)
{
     return items;
}

もちろん、これは単一の引数で呼び出すと機能します。しかし、おそらくフレームワークにはすでにこのようなものがあります。私はまだ発見していません。

1
追加された