C# 使用两个列表复制.NET上的内存
我正在.NET上开发一个小应用程序,我需要用两个不同的列表指向相同的数据,我想知道内存是否重复C# 使用两个列表复制.NET上的内存,c#,.net,sortedlist,C#,.net,Sortedlist,我正在.NET上开发一个小应用程序,我需要用两个不同的列表指向相同的数据,我想知道内存是否重复 public class Person { public string name; public int age; .... public Person(name, age) { this.name = name; this.age = age; } } SortedList<string> names;
public class Person
{
public string name;
public int age;
....
public Person(name, age)
{
this.name = name;
this.age = age;
}
}
SortedList<string> names;
SortedList<int> ages;
Person person1 = new Person("juan",23);
names.add("juan",person1);
ages.add(23,person1);
将更改两个列表中的对象
是这样吗
谢谢。是的,这将更改两个列表中的对象
如果你想省去这一点,我建议重载“=”操作符(显式)因为
Person
是一个类,你只需要在列表中添加一个引用,所以每个列表都有一个对同一个人的引用。Person
对象实际上不会重复,而names[“juan”]
将取消对原始对象的引用
然而!这并不能使代码完美无瑕:
- 23岁的人可能不止一人<代码>分类列表不喜欢这样
- 通过
更改年龄不会自动更新names[“juan”]
<代码>年龄[24]将失败ages
如果
Person
是一个struct
,那么Person
将在每次分配时被复制(但是:这不是struct
;不要这样做)要测试引用相等性,您可以始终执行以下操作:
bool equals = ReferenceEquals(obj1, obj2);
//in your case, obj1 = names["juan"], and obj2 = ages[23]
如果引用相同,这意味着对它的任何更改都将反映在引用同一对象的变量上
在您的情况下,是的,它们在两个列表中都是相同的引用。。因此,如果你在参考资料上做任何事情,无论是在
person1
、姓名[“juan”]
还是年龄[23]
上,它都会反映在任何地方。也就是说,您的收藏应该如下所示:
Person person1 = new Person();
SortedList<string, Person> names = new SortedList<string, Person>();
SortedList<int, Person> ages = new SortedList<int, Person>();
names.Add("juan", person1);
ages.Add(23, person1);
//names["juan"].age
//ages[23].age
//etc
Person-person1=新人();
SortedList name=新的SortedList();
SortedList ages=新的SortedList();
姓名。添加(“juan”,第1人);
增列年龄(23人,1人);
//姓名[“juan”]。年龄
//年龄[23]
//等
覆盖操作员会有什么帮助?没有任何地方可以使用它谢谢,我只是在处理非常大的列表,我担心它们会复制数据。我只使用那个类,例如,我的真实对象更复杂。创建一个复制构造函数@user2004810不,你不能在C中这样做,实际上我想成为两个不同列表中的同一个对象
Person person1 = new Person();
SortedList<string, Person> names = new SortedList<string, Person>();
SortedList<int, Person> ages = new SortedList<int, Person>();
names.Add("juan", person1);
ages.Add(23, person1);
//names["juan"].age
//ages[23].age
//etc