用引用替换列表值

3

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

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#使用引用的方式,以下代码无法实现上述功能:
    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]);
    }

有没有其他更简洁的方法来做这件事?

2
类似于 public IJob BigBoss { get { return Jobs[0]; set { Jobs[0]=value; } 的代码。 - KV Prajapati
2个回答

2
利用BigBoss的属性设置器来操作Jobs。然后在getter中通过Jobs[0]返回BigBoss

2

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

当你改变: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()
        };          
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接