haa*_*nsi 30 .net c# asp.net-3.5 visual-studio
我有一个类型:
public class Human
{
public int Id { get; set; }
public string Address { get; set; }
public string Name { get; set; }
public List<ContactNumber> ContactNumbers { get; set; }
public Human(int id)
{
Id = id;
}
public Human(int id, string address, string name,
List<ContactNumber> contactNumbers) :
this(id)
{
Address = address;
Name = name;
ContactNumbers = contactNumbers;
}
}
Run Code Online (Sandbox Code Playgroud)
请指导我是使用构造函数进行列表初始化的最佳实践吗?如何使用构造函数初始化列表?
编辑:
请指导我是使用构造函数进行列表初始化的最佳实践吗? 如何使用构造函数将值分配给列表,因此如果没有传递值,将使用默认值?
谢谢
Hum*_*rto 57
使用集合初始化程序
从C#3开始,您可以使用集合初始值设定项构建List并使用单个表达式填充它.以下示例构造Human及其ContactNumbers:
var human = new Human(1, "Address", "Name") {
ContactNumbers = new List<ContactNumber>() {
new ContactNumber(1),
new ContactNumber(2),
new ContactNumber(3)
}
}
Run Code Online (Sandbox Code Playgroud)
专攻Human构造函数
您可以更改Human类的构造函数以提供填充ContactNumbers属性的方法:
public class Human
{
public Human(int id, string address, string name, IEnumerable<ContactNumber> contactNumbers) : this(id, address, name)
{
ContactNumbers = new List<ContactNumber>(contactNumbers);
}
public Human(int id, string address, string name, params ContactNumber[] contactNumbers) : this(id, address, name)
{
ContactNumbers = new List<ContactNumber>(contactNumbers);
}
}
// Using the first constructor:
List<ContactNumber> numbers = List<ContactNumber>() {
new ContactNumber(1),
new ContactNumber(2),
new ContactNumber(3)
};
var human = new Human(1, "Address", "Name", numbers);
// Using the second constructor:
var human = new Human(1, "Address", "Name",
new ContactNumber(1),
new ContactNumber(2),
new ContactNumber(3)
);
Run Code Online (Sandbox Code Playgroud)
底线
哪种替代方案是最佳做法?或者至少是一个好的做法?你判断它!IMO,最佳做法是尽可能清楚地将程序编写给任何必须阅读它的人.在这种情况下,使用集合初始化程序对我来说是一个赢家.使用更少的代码,它可以做几乎与替代品相同的东西 - 至少,我提供的替代品......
你在找这个吗?
ContactNumbers = new List<ContactNumber>(){ new ContactNumber("555-5555"),
new ContactNumber("555-1234"),
new ContactNumber("555-5678") };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99348 次 |
| 最近记录: |