c# linq c#-3.0

c# - ¿Forma favorita de crear una nueva secuencia IEnumerable<T> a partir de un único valor?



linq c#-3.0 (4)

Normalmente creo una secuencia a partir de un único valor usando la sintaxis de matriz, como esta:

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

O usando una nueva lista. Me gustaría saber si alguien tiene una forma más expresiva de hacer lo mismo.


Me gusta lo que sugieres, pero con el tipo de matriz omitido:

var sequence = new[] { "abc" };


O incluso más corto,

string[] single = { "abc" };

Haría un método de extensión:

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

O incluso mejor y más corto, solo

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

Quizás esto es exactamente lo que Enumerable.Repeat está haciendo bajo el capó.


Tu ejemplo no es una secuencia vacía, es una secuencia con un elemento. Para crear una secuencia de cadenas vacía puede hacer

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

EDIT OP aclaró que estaban buscando crear un valor único. En ese caso

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


o simplemente crea un método

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

o

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

uso:

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