c#将更新的类实例添加到列表而不重复

时间:2015-02-01 16:49:23

标签: c# list

我试图使用类的实例将数据添加到列表(同一类)中。如果我只输入一个记录就可以正常工作,但是如果我更新实例并添加第二个(或第三个等等),列表中的所有行都包含对临时实例的最后一次更新。

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

1 个答案:

答案 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);

阅读this article about Value Types and Reference Types in C#