繁体   English   中英

TakeLast 在 .net 核心 3.1 中无法按预期工作

[英]TakeLast not working as expected in .net core 3.1

我在 .net 核心 3.1 控制台应用程序中编写了以下代码。 它没有按预期工作。

var arr = new List<int>(Enumerable.Range(1, 10));
var last5 = arr.TakeLast(5);
foreach (var i in last5)
    Console.WriteLine(i); //writing 6 7 8 9 10
arr.AddRange(new[] { 11, 12, 13, 14, 15 });
foreach (var i in last5)
    Console.WriteLine(i); //writing 6 7 8 9 10 11

它按预期工作(6 7 8 9 10 11 12 13 14 15)如果我将项目定位到 .net 核心 2.2。

我暂时使用for循环来解决这个问题。

为什么它在 .net 核心 2.2 和 3.1 中给出不同的值?

这里有一些观察:

  1. 在初始调用TakeLast(5)后调用ToList()可解决此问题。
  2. 在 arr.AddRange 之后调用arr.AddRange (5) 也可以解决此问题。

我认为这是一个与TakeLast.

在一种情况下(2.2 版),迭代器 position 在调用AddRange方法后未重置。 在另一个(3.1)中,它正在重置数组开始。

非常奇怪的行为,xD。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM