2017-02-14 57 views
3

Enumerable.Concat总是附加在第一个集合的末尾吗?是否Enumerable.Concat总是附加在第一个集合的末尾?

例子:

object someObject = new object(); 
List<object> listA = new List<object>(); 
listA.Add(new int()); 
object item = listA.Concat(new object[] { (object)new float() }).FirstOrDefault(); 

是它保证了itemintfloatConcat在每次使用后?这意味着:

[0] int 
[1] float 

的MSDN说,在得到的收集,然而实施例表明的顺序是从第一个集合的元素,然后从元素第二收集一无所知元件顺序。

回答

7

Concat是一种LINQ方法。这意味着这是一个查询。它不会创建列表或其他类型的集合,而是创建一个序列。

所以Concat实际上做的是合并这两个源序列。当迭代Concat的结果时,首先遍历第一个序列,然后遍历第二个序列。这个序列从来没有改变。

所以,是

该项目将是intfloat的毗连后每次使用


的MSDN只字未提元素顺序

好它does say

连接两个序列。

而且to concatenate意味着把一个后对方,而不是混合起来。


reference source

public static IEnumerable<TSource> Concat<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second) { 
    if (first == null) throw Error.ArgumentNull("first"); 
    if (second == null) throw Error.ArgumentNull("second"); 
    return ConcatIterator<TSource>(first, second); 
} 

static IEnumerable<TSource> ConcatIterator<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second) { 
    foreach (TSource element in first) yield return element; 
    foreach (TSource element in second) yield return element; 
} 

所以你看两个连续foreach将首先获得第一序列,那么第二序列的元素的元素。

相关问题