web-dev-qa-db-fra.com

Façon préférée de créer une nouvelle séquence IEnumerable <T> à partir d'une seule valeur?

Je crée généralement une séquence à partir d'une seule valeur en utilisant la syntaxe du tableau, comme ceci:

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

Ou en utilisant une nouvelle liste. J'aimerais savoir si quelqu'un a une façon plus expressive de faire la même chose.

93
Marcel Lamothe

Votre exemple n'est pas une séquence vide, c'est une séquence avec un élément. Pour créer une séquence de chaînes vide, vous pouvez le faire

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

MODIFIER OP a précisé qu'ils cherchaient à créer une valeur unique. Dans ce cas

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

J'aime ce que vous proposez, mais avec le type de tableau omis:

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

Ou encore plus court,

string[] single = { "abc" };

Je ferais une méthode d'extension:

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

Ou encore mieux et plus court, juste

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

C'est peut-être exactement ce que Enumerable.Repeat fait sous le capot.

21
nawfal

ou créez simplement une méthode

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

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

ou

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

utilisation:

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