必须有一个很好的标准方法来做到这一点,但是我工作的每个项目都必须编写自己的统一方法,或者创建一个内联数组等。
(我希望这会很快被关闭作为一个问题的副本,并附上一些很好的答案)
答案 0 :(得分:18)
一个简单的方法:
var singleElementSequence = Enumerable.Repeat(value, 1);
或者你可以在无约束的泛型类型上编写自己的扩展方法(通常是一个坏主意,诚然......谨慎使用):
public static IEnumerable<T> ToSingleElementSequence<T>(this T item)
{
yield return item;
}
用作:
IEnumerable<String> sequence = "foo".ToSingleElementSequence();
我认为我会优先使用Enumerable.Repeat
:)
答案 1 :(得分:4)
编辑想到在LINQ中提到我最喜欢的一些设备:
internal static IEnumerable<T> Concat<T>(params T[] objs)
{
return objs;
}
internal static IEnumerable<T> Concat<T>(this IEnumerable<T> e, params T[] objs)
{
return e.Concat(objs);
}
internal static IEnumerable<T> Concat<T>(this IEnumerable<T> e, params IEnumerable<T>[] seqs)
{
foreach (T t in e) yield return t;
foreach (var seq in seqs)
foreach (T t in seq) yield return t;
}
// this allows you to
var e1 = Concat(1,2,3); // 1,2,3
var e2 = e1.Concat(4,5,6); // 1,2,3,4,5,6,
var e3 = e2.Concat(e2, e1, Concat(42)); // 1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,42
以任何方式,形状或形式定义文字列表非常方便
另一种简单的方法:
IEnumerable<int> = new [] {42};
另一种简单的方法:
internal static IEnumerable<T> Enumerable<T>(this T obj)
{
yield return obj;
}
//
var enumerable = 42.Enumerable();
答案 2 :(得分:4)
最短的路是
new T[]{value}
答案 3 :(得分:2)
您可以定义自己的扩展方法:
public static class IEnumerableExt
{
// usage: someObject.AsEnumerable();
public static IEnumerable<T> AsEnumerable<T>(this T item)
{
yield return item;
}
}
.NET框架中没有任何内容可以执行此任务。