这是什么:new [] {}

时间:2013-07-31 16:27:01

标签: c# razor

我正试图掌握ASP MVC4,我在.cshtml文件中的@ {...}内遇到了这个:

        @Html.DropDownListFor(x => x.WillAttend, new[] { 
            new SelectListItem() {
                Text = "Yes, I'll be there",  
                Value = bool.TrueString}, 
            new SelectListItem() {
                Text = "No, I can't come",  
                Value = bool.FalseString} 
        }, "Choose an option") 

Q1)这是什么类型的事情:new[]{...}

Q2)我正确地说,对于剃须刀,大括号内的东西只是任何C#代码。

感谢。

2 个答案:

答案 0 :(得分:8)

此语法:

new[] { "foo", "bar", "baz" }

隐式类型化数据初始值设定项。数组的类型是从大括号内的元素推断出来的。例如,上面的完全等同于:

new String[] { "foo", "bar", "baz" }

在您的情况下,它将是new SelectItem[] { ... }

在C#3中引入了

Implicitly typed arrays(但即使面向.NET 2.0,您也可以使用它们;它们只是一个C#编译器功能)。它们部分支持使用anonymous types,但它们在其他情况下也很有用。

然而,在代码中的每个元素中,您都有一个object initializer,这是一种在单个表达式中创建对象和设置属性(或添加到集合)的方法。所以这个:

new SelectListItem() {
    Text = "No, I can't come",  
    Value = bool.FalseString
} 

相当于:

SelectListItem tmp = new SelectListItem();
tmp.Text = "No, I can't come";
tmp.Value = bool.FalseString;

...除了它是单个表达式,这就是为什么你能够在数组初始值设定项中使用它。同样,对象初始化器是在C#3中引入的。

对于Razor问题 - 我是这么认为的,但我认为关于何时将一段文本推断为“正常C#”的规则比这更复杂(为了更有用)。

答案 1 :(得分:6)

1)new[] {}创建项目数组,其中类型是从项目推断出来的,在这种情况下,它是SelectListItem的数组。

2)是的