簡體   English   中英

為什么這兩個清單 <string> 總是包含相同數量的項目?

[英]Why do these two List<string> always contain the same number of items?

我有一個非常簡單的程序,由於某種原因,我感到很困惑。 我放下它,今天早上又回來了,但我仍然很困惑。 首先,我知道這不是理想的解決方案。 我有兩種形式:Main和Log。 Main窗體中的按鈕在單擊時會添加到List _debugLog。 單擊btnDebug時,它將打開Log表單,並將_debugLog傳遞給它。 一切正常,計時器已設置並運行,一切正常。 每2.5秒觸發一次事件log.UpdateLog(),以使用更新后的日志來更新Log表單。 但是,mainFormLog.Count和_log.Count始終相同,並且當在主窗體上單擊btnAdd時,它們兩者都會增加。 _log如何從tick事件中獲取新的_debugLog(mainFormLog)?

namespace Tool
{
    public partial class Main : Form
    {
        private List<string> _debugLog = new List<string>();

        public Main()
        {
            InitializeComponent();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            _debugLog.Add("message!");
        }

        private void btnDebug_Click(object sender, EventArgs e)
        {
            Log log = new Log(_debugLog);
            log.Show();

            Timer dt = new Timer();
            dt.Interval = 2500;
            dt.Enabled = true;

            dt.Tick += delegate {
                log.UpdateLog(_debugLog);
            };

        }
    }

    public partial class Log : Form
    {
        private List<string> _log;

        public Log(List<string> log)
        {
            InitializeComponent();
            _log = log;
        }

        public void UpdateLog(List<string> mainFormLog)
        {
            if (mainFormLog.Count > _log.Count)
            {
                MessageBox.Show("Log has been updated!");
            }
            else
            {
                MessageBox.Show("Nothing new!" + mainFormLog.Count.ToString() + " / " + _log.Count.ToString());
            }
        }
    }
}

好吧,您是將對列表的引用從Main傳遞到Log,因此它實際上是相同的列表。

如果您想要一個單獨的列表,並使用Main中的列表進行初始化,則可以使用:

public Log(List<string> log)
{
    InitializeComponent();
    _log = new List<string>(log);
}

也許有助於理解變量和引用之間的區別:

對於值類型,值是信息本身。 對於引用類型,該值是一個引用,該引用可以為null,也可以是導航到包含該信息的對象的方式。

例如,將變量想像成一張紙。 它可能上面寫有值“ 5”或“ false”,但它不能擁有我的房子……它必須要有指向我房子的指示。 這些方向等同於參考。 特別是,兩個人可能有不同的紙條,這些紙條上有指向我家的相同指示-如果一個人按照這些指示將我的房子塗成紅色,那么第二個人也會看到這種變化。 如果他們倆在紙上都只有我的房子的獨立圖片,那么一個人給他們的紙上色根本不會改變另一個人的紙。

您的所有變量_debugLogmainFormLog_log都指向內存中的同一列表。 您只創建了一個列表,當您向該列表分配新變量時,它只是指向內存中某個位置的指針,它不會自動創建該列表的新副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM