C#类实例列表

C#类实例列表,c#,C#,我对编程并不陌生,但我对C#非常陌生。我试图用一个类的实例填充一个列表 我希望下面的代码在控制台中显示数字0到9,但它会重复9十次。很明显我做错了什么 我怀疑在列表中添加“a”只是添加了对“a”的引用,而不是class1的新实例。不过,我不确定我应该补充什么。将class1的新实例添加到列表中的正确语法是什么 提前感谢您的回答 using System; using System.Collections.Generic; using System.Linq; using System.Text;

我对编程并不陌生,但我对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;
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
List iList=新列表();
class1 a=新的class1();
对于(int i=0;i<10;i++)
{
增加(a);
iList[i].var1=i;
}
for(int i=0;i
您一次又一次地添加同一对象,这导致所有十项都指向同一对象

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

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

class1的实例应该在循环中:

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

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

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


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

iList.Add(new class1())是的,成功了!我怀疑我只是引用了同一个对象10次,而没有创建一个新对象,但我不知道如何创建一个新对象。我现在很难理解这有什么区别。如果将声明放在循环中,在每个循环的末尾,“a”实例将被销毁,那么在下一个循环中,名称“a”相同时,它是一个新实例,这是正确的吗?它实际上不会被销毁。它将保留在内存中,因为列表指向它。接下来将发生的是一个变量(引用)将指向另一个对象。因此,实际上,列表只是指向十个实例的指针目录,它只包含自身结构中的引用。那正确吗?我建议
iList.Add(new class1())
。是的,也许添加一个内联的新对象是最好的方法。但为了解释和展示目的,一次只做一件事有助于了解发生了什么:)