新List(){...}和新列表{...}之间的区别

时间:2015-04-23 07:48:01

标签: c# list

在C#中初始化一个新List时,以下两个都将编译:

(1)List<string> s = new List<string>() { "value" };

(2)List<string> s = new List<string> { "value" };

案例1和案例2有什么区别?

4 个答案:

答案 0 :(得分:1)

这适用于任何类型。通常,如果需要将某些内容传递给它不公开进行公开设置的类型构造函数,则指定()。如果不需要参数,()只是松散的。

考虑一下你可能想要对一个属性做一些额外的验证/逻辑并且你不允许直接操纵它的场景:

public class Foo
{
    private string Bar { get; set; }

    public string FooBar { get; set; }

    public Foo (string bar)
    {
        Bar = bar + "foo";
    }
}

所以这是允许的:

var foo = new Foo("bar")
{
    FooBar = "foobar"
};

然而,这不是:

var foo = new Foo
{
    Bar = "bar",
    FooBar = "foobar"
};

有些C#类型只允许您在构造函数中设置某些属性。

答案 1 :(得分:1)

没有区别。它将被翻译为:

List<string> s1 = new List<string>();
s1.Add("value");
List<string> s2 = new List<string>();
s2.Add("value");

答案 2 :(得分:1)

从7.6.10.1 C# reference 5.0的对象创建表达式:

  

对象创建表达式可以省略构造函数参数列表并括起括号,前提是它包含对象初始值设定项或集合初始值设定项。省略构造函数参数列表并括起括号等同于指定空参数列表。

答案 3 :(得分:0)

后者称为对象初始化。您也可以使用MyClass m = new MyClass { MyVar = 3 };