I usually create a sequence from a single value using array syntax, like this:
IEnumerable<string> sequence = new string[] { "abc" };
Or using a new List. I'd like to hear if anyone has a more expressive way to do the same thing.
I usually create a sequence from a single value using array syntax, like this:
IEnumerable<string> sequence = new string[] { "abc" };
Or using a new List. I'd like to hear if anyone has a more expressive way to do the same thing.
 
    
    Your example is not an empty sequence, it's a sequence with one element. To create an empty sequence of strings you can do
var sequence = Enumerable.Empty<string>();
EDIT OP clarified they were looking to create a single value. In that case
var sequence = Enumerable.Repeat("abc",1);
 
    
    I like what you suggest, but with the array type omitted:
var sequence = new[] { "abc" };
 
    
    Or even shorter,
string[] single = { "abc" };
I would make an extension method:
public static T[] Yield<T>(this T item)
{
    T[] single = { item };
    return single;
}
Or even better and shorter, just
public static IEnumerable<T> Yield<T>(this T item)
{
    yield return item;
}
Perhaps this is exactly what Enumerable.Repeat is doing under the hood.
 
    
    or just create a method
public static IEnumerable<T> CreateEnumerable<T>(params T[] items)
{
    if(items == null)
        yield break;
    foreach (T mitem in items)
        yield return mitem;
}
or
public static IEnumerable<T> CreateEnumerable<T>(params T[] items)
{
   return items ?? Enumerable.Empty<T>();
}
usage :
IEnumerable<string> items = CreateEnumerable("single");
