C# 对象/列表初始值设定项语法的优点是什么?

本文关键字:语法 是什么 对象 列表 | 更新日期: 2023-09-27 17:56:35

  1. 初始化大量静态对象时是否有任何速度提升?
  2. 是否有任何编译时或其他类型的优势?

例如:

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());

C# 对象/列表初始值设定项语法的优点是什么?

这两段代码之间没有运行时差异。 它们都将编译为同一个 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" }
            },
        },
    },
}