Создайте перечисление одного - PullRequest
5 голосов
/ 28 октября 2011

Если я хочу пустое перечисление, я могу позвонить Enumerable.Empty<T>().Но что, если я хочу преобразовать скалярный тип в перечисление?

Обычно я пишу new List<string> {myString} для передачи myString в функцию, которая принимает IEnumerable<string>.Есть ли более LINQ-й способ?

Ответы [ 4 ]

9 голосов
/ 28 октября 2011

Вы можете использовать Repeat:

var justOne = Enumerable.Repeat(value, 1);

Или просто массив, конечно:

var singleElementArray = new[] { value };

Версия массива, конечно, изменчива, тогда какEnumerable.Repeat нет.

3 голосов
/ 28 октября 2011

Возможно, самая короткая форма -

var sequence = new[] { value };
3 голосов
/ 28 октября 2011

Есть, но это менее эффективно, чем использование List или Array:

// an enumeration containing only the number 13.
var oneIntEnumeration = Enumerable.Repeat(13, 1);
1 голос
/ 28 октября 2011

Вы также можете написать свой собственный метод расширения:

public static class Extensions
{
    public static IEnumerable<T> AsEnumerable<T>(this T item)
    {
         yield return item;
    }
}

Сейчас я этого не сделал, и теперь, когда я знаю о Enumerable.Repeat, я, вероятно, никогда не буду (узнавать что-то новое каждый день),Но я сделал сделал это:

public static IEnumerable<T> MakeEnumerable<T>(params T[] items)
{
     return items;
}

И это, конечно, работает, если вы вызываете это с одним аргументом.Но, может быть, в рамках уже есть что-то подобное, чего я еще не обнаружил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...