我正在通过msdn http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-1上的教程工作,我来到这个部分,它要求我创建一个列表,在列表关闭后,它在括号外面有一个半冒号,就像这样
public ActionResult Index()
{
var genres = new List<Genre>
{
new Genre { Name = "Disco"},
new Genre { Name = "Jazz"},
new Genre { Name = "Rock"}
};
return View(genres);
}
我是c#的新手,想知道为什么我必须这样做,因为我正在创建笔记来为自己构建知识库。我已经看过以前在其他语言中使用它我确定但是我从来没有质疑它但它已经让我感到困扰了一段时间
答案 0 :(得分:8)
您正在查看列表初始值设定项。
而不是做
var genres = new List<Genre>();
genres.add(new Genre { Name = "Disco" });
genres.add(new Genre { Name = "Jazz" });
genres.add(new Genre { Name = "Rock" });
您可以使用已包含的精确流派来初始化列表。与将Name
添加到Genre
对象的方式非常相似。
列表初始化后的分号是一个简单的语句结束。不同类型后面的冒号用于分隔初始化程序中的条目。
答案 1 :(得分:0)
你的例子不是很有趣,所以我想出了一个更大的例子:
namespace Test
{
delegate int MyDel(); // semicolon required after delegate type declaration
abstract class Class
{
int Field1; // semicolon required after field
int Field2 = -1; // semicolon required after field with initializer
int Property1
{
get
{
return 42; // semicolon required after statement
} // semicolon disallowed after end of accessor body
set
{
} // semicolon disallowed after end of accessor body
} // semicolon disallowed after end of property block
int Method1()
{
Some.Statement.Here(); // semicolon required after statement
Some.Statement.Here(); // semicolon required after statement
; // extra semicolon means empty statement here, OK
return 10; // semicolon required after statement
} // semicolon disallowed after end of method body
protected abstract int Method2(); // semicolon required when method block or accessor block is absent
}; // semicolon optional after declaration of class, struct, interface, enum
}; // semicolon optional after namespace block
如您所见,对于每个分号和每个结束括号}
,我已指出是否需要分号;
,可选或不允许使用分号。
您的示例只是声明后需要分号的规则的示例。请注意,在最后一个语句(某些块)之后也需要分号,所以它不仅仅在语句之间。
对于逗号,
,在某些情况下,逗号在最后一项之后是可选的,如:
new List<int> { 2, 4, 6, }
或
enum Color { Blue, Yellow, Red, Green, }
但是对于方法参数列表和参数列表,在最后一项之后不允许使用逗号:
MyCall(2, 4, 6)