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");