Hỏi Về Captured Variable (indeep)

chào mọi người. em có 1 ít thắc mắc. mong mn giải đáp với ạ
em có 2 lớp:
1 là class people
http://codepad.org/09mtyKWd
2 là hàm main:
http://codepad.org/48PjKKX

và có 3 hàm trong đó 2 hàm BAD và 1 hàm Good (theo tác giả jeremy bytes)
và khi em chạy chương trình


nó cũng ổn. nhưng khi em debug từ từ(F11)
thì ko 2 hàm BAD còn lỗi và kết quả gần như tương đương hàm GOOD

và cũng sữ dụng debug và chạy theo F10 thì kết quả sẽ giống chạy bằng F5.
Câu hỏi 1 của em là: phải chăng tốc độ chạy chương trình ảnh hưởng tới kết quả (như em đã nói ở trên)
Câu hỏi 2 của em là: đại ý của tác giả là nếu tạo biến cục bộ trong vòng lặp thì nó sẽ tạo ra 7 biến khác nhau(mỗi lần chạy là tạo ra 1 biến mới). còn nếu khai báo ở bên ngoài vòng lặp thì nó chỉ tạo ra 1 biến mà thay đỗi value theo vòng lặp( đó là những gì e hiểu)
nhưng tại sao lại có sự khác biệt về kết quả. đại khái e vẫn ko hiểu lắm về captured variable

“The value of a captured variable is the value at the time it is used, not the value at the time it was captured.” trích tác giả viết.

cám ơn A/c đã đọc :slight_smile:

Notice!!!: Lần sau bạn đăng topic lên nhớ copy đoạn code của bạn vào đây Sau đó bôi đen đoạn đó và nhấn tổ hợp Ctrl+Shift+C để code hiển thị và highlight rõ ràng hơn nhé!!!
Ví dụ:

main.c

#include <stdio.h>
#include <stdlib.h>

int main()
{
      printf("Hello World!\n");
      return 0;
}

Còn nữa! Lần sau viết code nhớ clean hơn nhé! Lần này mình post code hộ bạn cho bạn hiểu nhé!
P/s: Code viết không rõ ràng, không tab, không cách ra nhìn như đống bùi nhùi thì người đọc người ta ngại giúp bạn lắm. Mình cũng thế mà :grin:

People.cs

using System;
using System.Collections.Generic;

namespace Captured_variable
{
    public static class People
    {
        public static List<Person> GetPeople()
        {
            var people = new List<Person>
            {
                new Person() { Id=1, FirstName="John", LastName="Koenig",
                    StartDate = new DateTime(1975, 10, 17), Rating=6 },

                new Person() { Id=2, FirstName="Dylan", LastName="Hunt",
                    StartDate = new DateTime(2000, 10, 2), Rating=8 },

                new Person() { Id=3, FirstName="John", LastName="Crichton",
                    StartDate = new DateTime(1999, 3, 19), Rating=7 },

                new Person() { Id=4, FirstName="Dave", LastName="Lister",
                    StartDate = new DateTime(1988, 2, 15), Rating=9 },

                new Person() { Id=5, FirstName="John", LastName="Sheridan",
                    StartDate = new DateTime(1994, 1, 26), Rating=6 },

                new Person() { Id=6, FirstName="Dante", LastName="Montana",
                    StartDate = new DateTime(2000, 11, 1), Rating=5 },

                new Person() { Id=7, FirstName="Isaac", LastName="Gampu",
                    StartDate = new DateTime(1977, 9, 10), Rating=4 }

            };
            return people;
        }
    }

    public class Person
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime StartDate { get; set; }
        public int Rating { get; set; }

        public override string ToString()
        {
            return string.Format("{0}: {1} {2}", Id, FirstName, LastName);
        }
    }
}

2 class lận a. nó rất dài nếu ngắn thì em cũng hay làm vậy.
code clean hơi là sao ạ. như e đã giải thích đó ko phải là code của em mà là của 1 tác giả nước ngoài khá nổi tiếng jeremy bytes.

nó cũng hơi bùi nhùi thật. nhưng đó là em trình bày tất cả suy nghĩ cũng như câu hỏi, và kết quả em thấy được cùng mọi người thảo luận. biết đâu cũng có nhưng người quan tâm giống em. ko hẳn là người trả lời là người biết hết. đơn giản chỉ là cùng nhau thảo luận thôi anh oi

Copy and paste!!! :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?