2009-06-19 52 views

回答

121

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

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

编辑 OP澄清,他们希望创建一个单一的价值。在这种情况下

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

噢,我分心了,对不起。我的意思是从单一值创建,而不是创建一个空实例! – 2009-06-19 19:53:18

+0

这是'答案'旗帜吗? – n8wrl 2009-06-19 19:57:29

+0

此方法比创建新阵列更纯粹的功能。 – 2011-10-04 01:00:16

58

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

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

或者更短,

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

或只是制造了一个方法

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"); 
相关问题