研究Xamarin我曾经遇到过这种花括号的使用:
Label header = new Label
{
Text = "Label",
Font = Font.BoldSystemFontOfSize(50),
HorizontalOptions = LayoutOptions.Center
};
我想知道它是如何正确的,因为通常在C#中我想创建一个对象实例:
Label label = new Label();
label.Text = "Label";
...
这是什么样的花括号?如何创建没有圆括号的对象?
答案 0 :(得分:5)
这是一个普通的C#3.0(或更高版本)对象初始化表达式。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb397680.aspx和http://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,这可能是您不熟悉它的原因。