假设我想连接 Enumerable.Repeat(100, 100) 和数字 3,最好的方法是什么?
我当然可以
Enumerable.Repeat(100, 100).Concat(Enumerable.Repeat(3,1))
,但它看起来不是很有表现力......
假设我想连接 Enumerable.Repeat(100, 100) 和数字 3,最好的方法是什么?
我当然可以
Enumerable.Repeat(100, 100).Concat(Enumerable.Repeat(3,1))
,但它看起来不是很有表现力......
如果你真的想让它整洁,那么最好的办法是为类似的东西创建一个扩展方法ConcatSingle
,然后调用它。
您可以使用仅包含该元素的中间数组:
Enumerable.Range(100, 100).Concat(new []{ 3 });
您还可以创建一个扩展方法来允许这样做,而无需创建额外的数组:
public static IEnumerable<T> ToEnumerable<T>(this T obj)
{
yield return obj;
}
现在这是可能的:
Enumerable.Range(100, 100).Concat(3.ToEnumerable());
public static IEnumerable<T> Concat(this IEnumerable<T> source, T item)
{
//the code here is not very expressive to you :)
}
编辑建议不要使用方法 name Concat
,使用ConcatSingle
orConcatOne
代替,请参阅下面评论中的讨论。
您可以创建将单个值转换为 IEnumerable 的扩展方法
public static class LinqEx
{
public static IEnumerable<T> ToIEnumerable<T>(this T singleItem)
{
yield return singleItem;
}
}
然后使用
Enumerable.Repeat(100, 100).Concat(3.ToIEnumerable())