学习Xamarin我遇到过这种花括号的用法:
Label header = new Label
{
Text = "Label",
Font = Font.BoldSystemFontOfSize(50),
HorizontalOptions = LayoutOptions.Center
};
Run Code Online (Sandbox Code Playgroud)
而且我想知道它是如何正确的,因为通常在C#中我想创建一个对象的实例:
Label label = new Label();
label.Text = "Label";
...
Run Code Online (Sandbox Code Playgroud)
这是什么样的花括号?如何创建没有圆括号的对象?
这是一个普通的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",
};
Run Code Online (Sandbox Code Playgroud)
和
Label label = new Label();
label.Text = "Label";
Run Code Online (Sandbox Code Playgroud)
在前者中,当设置属性的值导致异常时,header不分配变量,而后者则分配变量.原因是前者相当于:
Label temp = new Label();
temp.Text = "Label";
Label label = temp;
Run Code Online (Sandbox Code Playgroud)
如您所见,如果第二行中存在异常,则第三行永远不会被执行.