从单个值创建新的IEnumerable <T>序列的最佳方式?

Mar*_*the 93 c# linq c#-3.0

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

IEnumerable<string> sequence = new string[] { "abc" };
Run Code Online (Sandbox Code Playgroud)

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

Jar*_*Par 142

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

var sequence = Enumerable.Empty<string>();
Run Code Online (Sandbox Code Playgroud)

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

var sequence = Enumerable.Repeat("abc",1);
Run Code Online (Sandbox Code Playgroud)


Bry*_*tts 65

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

var sequence = new[] { "abc" };
Run Code Online (Sandbox Code Playgroud)

  • 我从没意识到你能做到这一点.我认为这比使用Repeat更清楚. (4认同)
  • @Bryan Watts我知道,但它是IEnumerable的具体实现.问题是要求IEnumerable <>(即使示例不是).有区别. (3认同)
  • 但这不是一个 IEnumerable,它是一个数组! (2认同)

naw*_*fal 21

甚至更短,

string[] single = { "abc" };
Run Code Online (Sandbox Code Playgroud)

我会做一个扩展方法:

public static T[] Yield<T>(this T item)
{
    T[] single = { item };
    return single;
}
Run Code Online (Sandbox Code Playgroud)

或者甚至更好更短

public static IEnumerable<T> Yield<T>(this T item)
{
    yield return item;
}
Run Code Online (Sandbox Code Playgroud)

也许这正是Enumerable.Repeat引擎盖下的事情.

  • 我认为ToEnumerable更合适. (6认同)
  • +1`收益率'是好的.我做了'IEnumerable <T> Yield <T>(这个T源,params T []其他人)`. (2认同)

And*_*rew 5

或只是创建一个方法

public static IEnumerable<T> CreateEnumerable<T>(params T[] items)
{
    if(items == null)
        yield break;

    foreach (T mitem in items)
        yield return mitem;
}
Run Code Online (Sandbox Code Playgroud)

要么

public static IEnumerable<T> CreateEnumerable<T>(params T[] items)
{
   return items ?? Enumerable.Empty<T>();
}
Run Code Online (Sandbox Code Playgroud)

用法:

IEnumerable<string> items = CreateEnumerable("single");
Run Code Online (Sandbox Code Playgroud)