C# 对象/列表初始值设定项语法的优点是什么?
本文关键字:语法 是什么 对象 列表 | 更新日期: 2023-09-27 17:56:35
- 初始化大量静态对象时是否有任何速度提升?
- 是否有任何编译时或其他类型的优势?
例如:
IList<object> objects = new List<object>
{
new object(),
new object(),
new object()
};
与:
IList<object> objects = new List<object>();
objects.Add(new object());
objects.Add(new object());
objects.Add(new object());
这两段代码之间没有运行时差异。 它们都将编译为同一个 IL。
初始值设定项语法的主要优点是,它基本上在单个表达式中初始化列表,而不是跨多个语句初始化列表。 例如,您可以使用它从方法返回列表,而无需显式创建临时变量(编译器会为您创建此临时变量):
public List<T> MakeListOf3<T>( T val )
{
return new List<T> { val, val, val };
}
与以下相反:
public List<T> MakeListOf3<T>( T val )
{
var list = new List<T>();
list.Add( val );
list.Add( val );
list.Add( val );
return list;
}
这是相当做作的,但你明白了。
这基本上是一种语法糖,而是个人品味和美学问题。
此外,值得一提的是,可以组合集合初始值设定项和对象初始值设定项。您可以在一次运行中构建非常复杂的结构,例如:
Product product = new Product
{
Name = "Dog food",
Price = 9.95,
Manufacturer =
{
Name = "Dog food producer"
Location = "Some location"
},
SimilarProducts =
{
new Product { Name = "Cat food" },
new Product { Name = "Bird food", Price = 5.50},
new Product
{
Name = "Guinea Pig food",
Price = 5.50
SimilarProducts =
{
new Product { Name = "Guinea Pig shampoo" },
new Product { Name = "Guinea Pig toofpaste" }
},
},
},
}