Любимый способ создания новой последовательности IEnumerable <T> из одного значения?
Обычно я создаю последовательность из одного значения, используя синтаксис массива, например:
IEnumerable<string> sequence = new string[] { "abc" };
Или используя новый список. Я хотел бы услышать, есть ли у кого-то более выразительный способ сделать то же самое.
Ответы
Ответ 1
Ваш пример не пустой последовательности, это последовательность с одним элементом. Чтобы создать пустую последовательность строк, вы можете сделать
var sequence = Enumerable.Empty<string>();
РЕДАКТИРОВАТЬ ОП выяснили, что они хотели создать одно значение. В этом случае
var sequence = Enumerable.Repeat("abc",1);
Ответ 2
Мне нравится то, что вы предлагаете, но с типом массива опущено:
var sequence = new[] { "abc" };
Ответ 3
Или даже короче,
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
под капотом.
Ответ 4
или просто создайте метод
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");