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

时间:2017-02-14 09:10:37

标签: c# ienumerable concat

Enumerable.Concat是否总是追加到第一个集合的末尾?

示例:

TypeError: list() got an unexpected keyword argument 'organizers_pk'

每次使用object someObject = new object(); List<object> listA = new List<object>(); listA.Add(new int()); object item = listA.Concat(new object[] { (object)new float() }).FirstOrDefault(); 后,itemint还是float是否保证?这意味着:

Concat

MSDN没有说明结果集合中的元素顺序,但是示例显示顺序是第一个集合中的元素,然后是第二个集合中的元素。

1 个答案:

答案 0 :(得分:7)

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

那么Concat实际上做的是组合两个源序列。当您遍历Concat的结果时,您首先遍历第一个序列,然后遍历第二个序列。因此,序列永远不会改变。

所以,是的

  

每次使用后,该项目将为int而不是float

  

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将首先产生第一个序列的元素,然后产生第二个序列的元素。