加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 23:37:26 所属栏目:百科 来源:网络整理
导读:Enumerable.Concat是否总是附加在第一个集合的末尾? 例: object someObject = new object();Listobject listA = new Listobject();listA.Add(new int());object item = listA.Concat(new object[] { (object)new float() }).FirstOrDefault(); 在每次使用C
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();

在每次使用Concat后,是否保证该项目不会浮动?这意味着:

[0] int
[1] float

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

解决方法

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

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

所以,是的

the item will be int not float after Concat on every use

The MSDN says nothing about element order

好吧does say

Concatenates two sequences.

并且连接意味着一个接一个地放,而不是混淆它们.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读