C# TakeLast在.net core 3.1中未按预期工作
我在.NETCore3.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
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)也可以解决此问题AddRange
方法后,迭代器位置没有重置。在另一个(3.1)中,它将重置阵列启动
非常奇怪的行为,xD。你期望的结果是什么?问题很清楚。它在2.2版本中工作,但在3.1版本中不工作,我不会说,这是您的结果—预期结果。但是,你可以检查发生了什么我的问题很简单。为什么它在.net core 2.2和3.1中给出了不同的值?它在两天前被作为一个bug输入:显然是因为它是一个bug。