我通常从一个单一的值使用数组语法创建一个序列,像这样:最喜欢的方式来创建一个新的IEnumerable <T>序列从一个单一的值?
IEnumerable<string> sequence = new string[] { "abc" };
或使用新的列表。我想听听有没有人有更富有表现力的方式来做同样的事情。
我通常从一个单一的值使用数组语法创建一个序列,像这样:最喜欢的方式来创建一个新的IEnumerable <T>序列从一个单一的值?
IEnumerable<string> sequence = new string[] { "abc" };
或使用新的列表。我想听听有没有人有更富有表现力的方式来做同样的事情。
你的例子不是一个空的序列,它是一个具有一个元素的序列。要创建一个字符串的空序列,你可以做
var sequence = Enumerable.Empty<string>();
编辑 OP澄清,他们希望创建一个单一的价值。在这种情况下
var sequence = Enumerable.Repeat("abc",1);
噢,我分心了,对不起。我的意思是从单一值创建,而不是创建一个空实例! – 2009-06-19 19:53:18
这是'答案'旗帜吗? – n8wrl 2009-06-19 19:57:29
此方法比创建新阵列更纯粹的功能。 – 2011-10-04 01:00:16
我喜欢你有什么建议,但省略了数组类型:
var sequence = new[] { "abc" };
或者更短,
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
正在做的事情。
或只是制造了一个方法
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");
怎么是空序列? – CoderDennis 2009-06-19 19:48:56