簡體   English   中英

C# 類實例列表

[英]C# List of class instances

我對編程並不陌生,但我對 C# 很陌生。 我正在嘗試使用類的實例填充列表。

我希望下面的代碼在控制台中顯示數字 0 到 9,但它會重復 9 十次。 顯然我做錯了什么。

我懷疑將“a”添加到列表中只是添加了對“a”的引用,而不是 class1 的新實例。 我不確定我應該添加什么。 將 class1 的新實例添加到列表中的正確語法是什么?

提前感謝您的任何答案!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<class1> iList = new List<class1>();
            class1 a = new class1();

            for (int i = 0; i < 10; i++)
            {

                iList.Add(a);
                iList[i].var1 = i;
            }
            for (int i = 0; i < iList.Count; i++)
            {
                System.Console.Write("var1 of " + i + ": " + iList[i].var1 + "\r\n");
            }
            Console.ReadLine();
        }
    }

    class class1
    {
        public int var1;
    }
}

您一遍又一遍地添加相同的對象,這就是導致所有十個項目都指向同一個對象的原因。

將對象添加到列表時,您並不是在創建新對象。 您正在添加對正在添加的對象的引用。 在本例中,您添加了 10 次相同的引用。 因此,每次訪問var1屬性時,都會重新寫入相同的值。

然后,當您遍歷列表(將包含 10 個引用)時,所有這些引用都指向同一個對象。

class1 的實例應該在循環中:

for (int i = 0; i < 10; i++)
{
    class1 a = new class1();
    iList.Add(a);
    iList[i].var1 = i;
}

你熟悉哪種編程語言? 在通常的流行語言中,來自類的對象是指稱數據類型。 如果在列表中添加兩次相同的實例,則更改該實例中的字段將反映列表中的兩個元素。

在您的特定情況下,您只添加了一個實例 10 次。 在最后一次迭代中,您確實將字段的值更改為9 ,這反映了指向該實例的數組中的所有項目。

如果要實現所需的行為,則需要添加該類的新實例。 例如,在循環中創建它,而不是在它之外。

暫無
暫無

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

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