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);
我正在尝试使用 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);