在对象初始值设定项中引用要初始化的对象的其他属性
本文关键字:对象 引用 初始化 其他 属性 | 更新日期: 2023-09-27 18:37:17
创建对象时:
var customers = new Customers
{
Persons = new List<Person>
{
new Person { CustomId = "111" },
new Person { CustomId = "222" }
},
Organizations = new List<Organization>
{
new Organization { CustomId = "333" }
},
Keys = new HashSet<string> { "111", "222", "333" }
};
我想更改密钥的初始化以使用来自 Person[0] 的先前值。自定义ID,人[1]。自定义ID和组织[0]。自定义 ID。(不像这样的硬编码"111"、"222"、"333")
在这种类型的初始化中,有没有一种简单的方法可以做到这一点?我可以在客户初始化后添加密钥,如下所示:
foreach (var person in customers.Persons)
{
customers.Keys.Add(person.CustomId);
}
foreach (var org in customers.Organizations)
{
customers.Keys.Add(org.CustomId);
}
但是我无法在与客户相同的初始化中从个人和组织属性创建密钥?
不,你不能那样做。
您可以先创建集合,然后连接选定的键:
var persons = new List<Person>
{
new Person { CustomId = "111" },
new Person { CustomId = "222" }
};
var organizations = new List<Organization>
{
new Organization { CustomId = "333" }
};
var keys = persons.Select(p => p.CustomId)
.Concat(organizations.Select(o => o.CustomId));
var customers = new Customers
{
Persons = persons,
Organizations = organizations,
Keys = new HashSet<string>(keys),
}
但正如其他人所说,这种实现存在更多问题。是否要对 Customers 类的每个使用者使用此语法?如何使密钥集合与个人和组织集合保持最新,例如在中添加或删除项目时?
public class Customers
{
public List<Person> Persons { get; set; }
public List<Organization> Organizations { get; set; }
public Customers()
{
Persons = new List<Person>();
Organizations = new List<Organization>();
}
public Customers(IEnumerable<Person> persons,
IEnumerable<Organization> organizations)
: this()
{
Persons.AddRange(persons);
Organizations.AddRange(organizations);
}
public IEnumerable<string> Keys
{
return Persons.Select(p => p.CustomId)
.Concat(Organizations.Select(o => o.CustomId));
}
}
那么呼叫站点可能如下所示:
var persons = new List<Person>
{
new Person { CustomId = "111" },
new Person { CustomId = "222" }
};
var organizations = new List<Organization>
{
new Organization { CustomId = "333" }
};
var customers = new Customers(persons, organizations);
var keys = customers.Keys;
将密钥转换为公共属性,如下所示:
public HashSet<string> Keys
{
get
{
// create and return a new hashset from persons and organizations
}
}
这样,您就必须考虑更新您的密钥成员。