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();
后,item
是int
还是float
是否保证?这意味着:
Concat
MSDN没有说明结果集合中的元素顺序,但是示例显示顺序是第一个集合中的元素,然后是第二个集合中的元素。
答案 0 :(得分:7)
Concat
是LINQ方法。这意味着它是查询。它不会创建列表或其他类型的集合,而是创建序列。
那么Concat
实际上做的是组合两个源序列。当您遍历Concat
的结果时,您首先遍历第一个序列,然后遍历第二个序列。因此,序列永远不会改变。
所以,是的
每次使用后,该项目将为
int
而不是float
MSDN没有提及元素顺序
好吧does say
连接两个序列。
并且to concatenate
表示在之后放置一个,而不是混淆它们。
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
将首先产生第一个序列的元素,然后产生第二个序列的元素。