使用带有对象构造的花括号

时间:2014-09-12 13:09:34

标签: c# curly-brackets

研究Xamarin我曾经遇到过这种花括号的使用:

Label header = new Label
{
    Text = "Label",
    Font = Font.BoldSystemFontOfSize(50),
    HorizontalOptions = LayoutOptions.Center
};

我想知道它是如何正确的,因为通常在C#中我想创建一个对象实例:

Label label = new Label();
label.Text = "Label";
...

这是什么样的花括号?如何创建没有圆括号的对象?

2 个答案:

答案 0 :(得分:5)

这是一个普通的C#3.0(或更高版本)对象初始化表达式。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb397680.aspxhttp://msdn.microsoft.com/en-us/library/vstudio/bb738566.aspx

之间存在细微差别
Label header = new Label
{
    Text = "Label",
};

Label label = new Label();
label.Text = "Label";

在前者中,当设置属性的值导致异常时,不分配变量header,而后者则分配变量Label temp = new Label(); temp.Text = "Label"; Label label = temp; 。原因是前者相当于:

{{1}}

如您所见,如果第二行中存在异常,则第三行永远不会被执行。

答案 1 :(得分:3)

这只是初始化对象属性的另一种语法,称为object initializer syntax。它可以作为告诉未来开发人员的一种方式。这个对象在设置这些属性之前还没有准备好。

此语法是新功能之一in C# 3.0,这可能是您不熟悉它的原因。