我试图使用类的实例将数据添加到列表(同一类)中。如果我只输入一个记录就可以正常工作,但是如果我更新实例并添加第二个(或第三个等等),列表中的所有行都包含对临时实例的最后一次更新。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _13._5_Functions
{
class Dog
{
public string Name;
public int Age;
}
class Program
{
static void Main(string[] args)
{
List<Dog> Dogs = new List<Dog>();
Dog myDog = new Dog();
myDog.Name = "Ralph";
myDog.Age = 14;
Dogs.Add(myDog);
myDog.Name = "Spot";
myDog.Age = 8;
Dogs.Add(myDog);
foreach (Dog d in Dogs)
{
Console.WriteLine("Name: " + d.Name + " Age: " + d.Age);
}
Console.Read();
}
}
}
结果:
姓名:现货年龄:8
姓名:现货年龄:8
答案 0 :(得分:4)
这是因为类是引用类型,并且您的对象正在响应相同的内存位置,当您更改它的状态时,它正在更改该内存位置的值。
每次在列表中添加新项目之前,必须通过创建新实例来分配新内存,否则它将更新相同的内存位置
List<Dog> Dogs = new List<Dog>();
Dog myDog = new Dog();
myDog.Name = "Ralph";
myDog.Age = 14;
Dogs.Add(myDog);
myDog = new Dog(); // note this line
myDog.Name = "Spot";
myDog.Age = 8;
Dogs.Add(myDog);