【问题标题】:TakeLast not working as expected in .net core 3.1TakeLast 在 .net core 3.1 中无法按预期工作
【发布时间】:2020-11-14 22:31:44
【问题描述】:

我在 .net core 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

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

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

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

【问题讨论】:

标签: c# linq .net-core .net-core-3.0 .net-core-3.1


【解决方案1】:

这里有一些观察:

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

我认为这是与TakeLast. 返回的迭代器相关的错误

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

非常奇怪的行为,xD。

【讨论】:

  • 是的,这是一个错误。
猜你喜欢
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 2020-04-25
  • 1970-01-01
  • 2019-08-26
  • 2018-05-03
  • 2014-07-20
相关资源
最近更新 更多