5

学习 Xamarin 我遇到了这种花括号的用法:

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

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

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

大括号的用途是什么?如何创建没有圆括号的对象?

4

2 回答 2

6

这是一个普通的 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;

如您所见,如果第二行出现异常,则第三行永远不会执行。

于 2014-09-12T13:16:00.483 回答
3

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

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

于 2014-09-12T13:10:52.930 回答