C#object / list初始化程序语法有哪些优点?

时间:2014-04-03 22:45:24

标签: c# initializer-list initializer

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

    IList<object> objects = new List<object>
    {
        new object(),
        new object(),
        new object()
    };
    

    vs:

    IList<object> objects = new List<object>();
    objects.Add(new object());
    objects.Add(new object());
    objects.Add(new object());
    

2 个答案:

答案 0 :(得分:3)

这两段代码之间没有运行时间差异。他们都会编译成同一个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;
}

这是非常人为的,但你明白了。

答案 1 :(得分:2)

它基本上是一种语法糖,而且是个人品味和美学的问题。

此外,值得一提的是,可以组合集合初始化器和对象初始化器。你可以在一次运行中构建相当复杂的结构,例如:

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" }
            },
        },
    },
}