簡體   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