C#类实例列表

本文关键字:列表 实例 | 更新日期: 2023-09-27 18:27:11

我对编程并不陌生,但我对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;
    }
}

C#类实例列表

您一次又一次地添加同一个对象,这就是导致所有十个项都指向同一对象的原因。

将对象添加到列表中时,并不是在创建新对象。您正在添加对要添加的对象的引用。在本例中,您将添加相同的引用10次。因此,每次访问var1属性时,都会重写相同的值。

然后,当您在列表(将包含10个引用)上循环时,所有这些引用都指向同一个对象。

类1的实例应该在循环中:

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

您熟悉哪种编程语言?在普通的流行语言中,类中的对象是引用的数据类型。如果在列表中添加两次相同的实例,则更改该实例中的字段将反映列表中的两个元素。

在您的特定情况下,您只添加了一个实例10次。在上一次迭代中,您确实将字段的值更改为9,这反映了数组中指向该实例的所有项。

如果要实现所需的行为,则需要添加该类的新实例。例如,在循环中创建它,而不是在循环之外。