使用两个列表在.NET上重复内存

Man*_*jar 5 .net c# sortedlist

我正在研究.NET上的一个小应用程序,我需要用2个不同的列表指向相同的数据,我想知道是否内存是重复的,例如

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);
Run Code Online (Sandbox Code Playgroud)

我猜.NET作为Java不会复制对象Person,所以它会被保留,所以如果我这样做:

names("juan").age = 24
Run Code Online (Sandbox Code Playgroud)

将更改两个列表中的对象.

这样对吗?

谢谢.

Mar*_*ell 5

因为Person是一个类,所以您只是在列表中添加引用,因此每个列表都会引用同一个人.该Person对象确实不会重复,names["juan"]并将取消引用原始对象.

然而!这不会使代码完美无缺:

  • 可能有不止一个23岁的人; SortedList<,>不会那样的
  • 通过改变年龄names["juan"]不会自动更新ages; ages[24]将失败

如果Person是a struct,则每次分配时Person 都会被复制(但是:这不是a的好选择struct;不要这样做)