通过引用替换列表值

本文关键字:列表 替换 引用 | 更新日期: 2023-09-27 18:00:40

我有一个类看起来像这样:

public class Organization
{
    public List<IJob> Jobs { get; set; }
    public IJob BigBoss { get; set; }
    public Organization()
    {
        BigBoss = new Doctor();
        Jobs = new List<IJob>
        {
            BigBoss,
            new Doctor(),
            new Doctor()
        };
    }
}

如果我将BigBoss属性设置为一个新值,我希望该值也在列表中更新。在BigBoss指向新的东西之后,列表中的第一项也应该如此。我知道以下代码在C#中不会这样做,因为C#使用引用的方式:

    static void Main(string[] args)
    {
        var test = new Organization();
        test.BigBoss = new Developer();
        //test.Jobs[0] is still pointing to a Doctor, not a Developer
        Console.WriteLine(test.Jobs[0]);
    }

有其他干净的方法吗?

通过引用替换列表值

Jobs[0]是调用构造函数new Organization(); 时对BigBoss = new Doctor();的引用

更改时:test.BigBoss = new Developer();您的BigBoss指的是Developer,但Jobs[0]仍然指的是旧BigBoss。

你可以这样改变你的组织:

public class Organization
{
    public List<IJob> Jobs { get; set; }
    private IJob bigBoss;
    public IJob BigBoss { get {return Jobs[0];} set { Jobs[0] = value; } }
    public Organization()
    {       
        bigBoss = new Doctor();     
        Jobs = new List<IJob>
        {
            bigBoss,
            new Doctor(),
            new Doctor()
        };          
    }
}

使用BigBoss的属性setter来操作作业。然后通过getter中的Jobs[0]返回BigBoss