从单个值创建新的IEnumerable <t>序列的最佳方法是什么?</t>

时间:2009-06-19 19:46:01

标签: c# linq c#-3.0

我通常使用数组语法从单个值创建序列,如下所示:

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

或使用新列表。我想听听是否有人有更富有表现力的方式来做同样的事情。

4 个答案:

答案 0 :(得分:139)

您的示例不是空序列,它是具有一个元素的序列。要创建一个空字符串序列,您可以

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

编辑 OP明确表示他们希望创建单一值。在那种情况下

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

答案 1 :(得分:63)

我喜欢你的建议,但省略了数组类型:

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

答案 2 :(得分:21)

甚至更短,

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正在做的事情。

答案 3 :(得分:5)

或只是创建一个方法

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