通过引用替换列表值

时间:2015-07-02 03:32:52

标签: c#

我有一个看起来像这样的课程:

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]);
    }

还有其他一些干净的方式吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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()
        };          
    }
}