通过引用替换列表值
本文关键字:列表 替换 引用 | 更新日期: 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
。