C# TakeLast在.net core 3.1中未按预期工作

C# TakeLast在.net core 3.1中未按预期工作,c#,linq,.net-core,.net-core-3.0,.net-core-3.1,C#,Linq,.net Core,.net Core 3.0,.net Core 3.1,我在.NETCore3.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 (va

我在.NETCore3.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
var arr=新列表(可枚举范围(1,10));
var last5=arr.TakeLast(5);
foreach(上一个5中的变量i)
控制台写入线(i)//写作678910
arr.AddRange(新[{11,12,13,14,15});
foreach(上一个5中的变量i)
控制台写入线(i)//写作67891011
如果我将项目定位在.NETCore2.2中,它将按预期工作(67891011121415)

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


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

以下是一些观察结果:

  • 在首次调用
    TakeLast(5)
    后调用
    ToList()
    ,可以解决此问题
  • arr.AddRange
    之后调用arr.TakeLast(5)也可以解决此问题
  • 我假设这是一个bug,它与TakeLast返回的迭代器有关。

    在一种情况下(版本2.2),在调用
    AddRange
    方法后,迭代器位置没有重置。在另一个(3.1)中,它将重置阵列启动


    非常奇怪的行为,xD。

    你期望的结果是什么?问题很清楚。它在2.2版本中工作,但在3.1版本中不工作,我不会说,这是您的结果—预期结果。但是,你可以检查发生了什么我的问题很简单。为什么它在.net core 2.2和3.1中给出了不同的值?它在两天前被作为一个bug输入:显然是因为它是一个bug。