c# 将 class 的更新实例添加到没有重复的列表中

c# add updated instance of class to list without duplicates

我正在尝试使用 class 的实例将数据添加到列表(属于相同的 class)。如果我只输入一条记录它工作正常但如果我更新实例并添加第二个(或第三个,等等......)列表中的所有行都包含对我的临时实例的最后更新。

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

这是因为 类 是引用类型,您的对象引用相同的内存位置,当您更改它的状态时,它会更改该内存位置的值。

每次在列表中添加新项目之前,您必须通过创建新实例来分配新内存,否则它将更新相同的内存位置

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#