2013-11-25 2 views
1

Я работаю над учебником по 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# и хотел выяснить, почему я должен был сделать это, как я создаю заметки для создания базы знаний для себя. Я видел, как это использовалось раньше на других языках, я уверен, но я никогда не спрашивал об этом, но это прослушивало меня некоторое время.

+1

Точка с запятой заканчивается на C# (и на других языках). –

+2

Если ваш новый на C#, то кажется, что этот учебник немного продвинут для вас, так как синтаксис «shortcutty». в основном просто рассматривают его как конец строки кода – Sayse

+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 объектам.

Точка с запятой после инициализации списка является простым утверждением. Двоеточия после разных жанров используются для разделения записей в вашем инициализаторе.

+0

Это был именно тот ответ, который я получил после того, как не было комментариев, которые у меня были в дальнейшем, когда люди предполагают, что я не понимаю, что полуколона заканчивает строку кода. Cheers dude – Crouch

+1

@Crouch: [Инициализаторы коллекции] (http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx) - это тот термин, который вы искали (вы можете не только инициализировать списки таким образом). –

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) 
Смежные вопросы