คำถามติดแท็ก captured-variable

9
จับตัวแปรในวงใน C #
ฉันพบปัญหาที่น่าสนใจเกี่ยวกับ C # ฉันมีรหัสเช่นด้านล่าง List<Func<int>> actions = new List<Func<int>>(); int variable = 0; while (variable < 5) { actions.Add(() => variable * 2); ++ variable; } foreach (var act in actions) { Console.WriteLine(act.Invoke()); } ฉันคาดหวังให้มันส่งออก 0, 2, 4, 6, 8 อย่างไรก็ตามจริงๆแล้วมันส่งออกห้า 10s ดูเหมือนว่าเกิดจากการกระทำทั้งหมดที่อ้างถึงตัวแปรที่ถูกจับหนึ่งตัว ดังนั้นเมื่อพวกเขาได้รับการเรียกพวกเขาทั้งหมดมีผลลัพธ์ที่เหมือนกัน มีวิธีแก้ไขข้อ จำกัด นี้เพื่อให้แต่ละอินสแตนซ์การดำเนินการมีตัวแปรที่จับภาพได้หรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.