我不是编程的新手,但我对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;
}
}
答案 0 :(得分:9)
您反复添加同一个对象,导致所有十个项目都指向同一个对象。
将对象添加到列表时,不会创建新对象。您正在添加对要添加的对象的引用。在此示例中,您将添加相同的引用10次。因此,每次访问var1
属性时,您都在重写相同的值。
然后,当你循环遍历列表(包含10个引用)时,所有这些引用都指向同一个对象。
class1的实例应该在循环中:
for (int i = 0; i < 10; i++)
{
class1 a = new class1();
iList.Add(a);
iList[i].var1 = i;
}
答案 1 :(得分:1)
您熟悉哪种编程语言?在普通的流行语言中,来自类的对象是指示数据类型。如果在列表中添加两次相同的实例,则更改该实例中的字段将反映列表中的两个元素。
在您的特定情况下,您只添加一个实例10次。在最后一次迭代中,您确实将字段的值更改为9
,这反映了数组中指向该实例的所有项。
如果要实现所需的行为,则需要添加该类的新实例。例如。在循环中创建它,而不是在它之外。