2017-02-14 60 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將首先獲得第一序列,那麼第二序列的元素的元素。

相關問題