web-dev-qa-db-ja.com

単一の値から新しいIEnumerable <T>シーケンスを作成するお気に入りの方法は?

私は通常、次のような配列構文を使用して単一の値からシーケンスを作成します。

IEnumerable<string> sequence = new string[] { "abc" };

または、新しいリストを使用します。誰かが同じことをするより表現力豊かな方法を持っているかどうか聞いてみたい。

93
Marcel Lamothe

あなたの例は空のシーケンスではなく、1つの要素を持つシーケンスです。空の文字列を作成するには

var sequence = Enumerable.Empty<string>();

[〜#〜] edit [〜#〜] OPは、単一の値を作成しようとしていることを明確にしました。その場合

var sequence = Enumerable.Repeat("abc",1);
140
JaredPar

私はあなたが提案するものが好きですが、配列型は省略されています:

var sequence = new[] { "abc" };
64
Bryan Watts

またはさらに短く、

string[] single = { "abc" };

拡張メソッドを作成します:

public static T[] Yield<T>(this T item)
{
    T[] single = { item };
    return single;
}

またはさらに良くて短く、ただ

public static IEnumerable<T> Yield<T>(this T item)
{
    yield return item;
}

おそらくこれはまさにEnumerable.Repeatは内部で実行しています。

21
nawfal

または単にメソッドを作成する

public static IEnumerable<T> CreateEnumerable<T>(params T[] items)
{
    if(items == null)
        yield break;

    foreach (T mitem in items)
        yield return mitem;
}

または

public static IEnumerable<T> CreateEnumerable<T>(params T[] items)
{
   return items ?? Enumerable.Empty<T>();
}

使用法 :

IEnumerable<string> items = CreateEnumerable("single");
5
Andrew