我通常使用数组语法从单个值创建序列,例如:
IEnumerable<string> sequence = new string[] { "abc" };
或者使用一个新的List。我想听听是否有更具表现力的方法来完成相同的事情。
你的例子不是一个空序列,而是一个只有一个元素的序列。要创建一个空的字符串序列,可以执行以下操作:
var sequence = Enumerable.Empty<string>();
编辑 OP澄清他们正在寻求创建单个值。在这种情况下
var sequence = Enumerable.Repeat("abc",1);
我喜欢你所建议的,但省略了数组类型:
var sequence = new[] { "abc" };
Task.FromResult
来实现这一点。 - Bryan Wattsstring[] 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
在幕后所做的事情。Yield
很好。我也制作了 IEnumerable<T> Yield<T>(this T source, params T[] others)
。 - Jodrell(item) => yield return item;
传递给一个期望IEnumerable的函数,或者定义一个Func<IEnumerable<item>> = () => yield return 1;
之类的东西。但是由于我指出的原因,在接受的答案中提到,这是不可能的。 - Peter - Reinstate Monica或者只需创建一个方法
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");
Enumerable.From<T>(params T[] items)
这样的东西。 - Good Night Nerd Pride