ключ за ключови думи (искане за C #), Microsoft документи
В тази статия,
ключ - е изборът на оператора, който е избрал да извърши раздел ключ от списъка с кандидати, сравнявайки ги със съответния израз.
Отчетът за превключвател често се използва вместо структурата ако-друго. Ако един израз се сравнява с три или повече условия. Например, следното изявление ключ определя дали цветовия тип, е една от трите стойности на променливи:
Това е еквивалентно на следния пример, в които строителството се използва, ако - друго.
Съответният експресията
Съвпадение израз осигурява стойност за сравнение с шаблонни тагове за всеки случай. Той има следния синтаксис:
В C #, 6 съвпадение експресия трябва да бъде израз, който връща стойността от следните видове:
Тъй C # 7, експресията на съвпадение може да бъде всеки израз, различен от NULL.
раздел превключвател
Отчетът за ключ се състои от един или повече дялове преминат. Всяка секция на ключа съдържа един или повече етикети случай. последван от един или повече оператори. Следният пример показва ясна декларация превключвател с три секции преминат. Всеки раздел съдържа случай превключвател етикет, като например случая 1. и двама оператори.
Един превключвател оператор може да включва всякакъв брой секции на превключвател, и всеки клавиш може да има един или повече етикети случай (както е показано в примера по-долу). Въпреки това, две случай етикети не могат да съдържат същия израз.
Извършва само ключа секция в изявление превключвател. C # не позволява да се продължи със следващия раздел ключа след предишния раздел. В тази връзка, следния код генерира CS0163 грешка съставител: ". Управление не може да се предава от един случай марка () към друг"
Обикновено, това изискване доволен ясно от раздела за превключване с помощта на отчета за почивка. Отидох или замяна. В този случай, нека приемем, също следния код, тъй като той гарантира, че управлението на програмата, няма да бъде предаден на раздел ключ по подразбиране.
Изпълнение на списъка на операторите в секцията с ключа с надпис случай е уместно сравнението на изразяване, започва с първото твърдение и списъкът продължава, обикновено докато операторът на преход, като например прекъсване. При Гото. Отидох етикет. върне или се хвърлят. В този момент, контрол е прехвърлен извън отчета за превключвател, или на друг случай маркер. Отидох изявление. ако се използва, трябва да прехвърлят контрола за маркиране на вида на постоянна. Това ограничение е необходимо, тъй като опитът за прехвърляне контрол на променлива типа етикет може да има нежелани странични ефекти, като прехвърляне на контрола на нежелано място в кода или създаване на безкраен цикъл.
при таг
Всеки знак, показва случай, за сравнение с съвпадение експресионния модел (caseSwitch променлива в предишния пример). Ако те съвпадат, управлението се предава, за да превключите секция, която съдържа първия правилното печат делото. Ако се направи сравнение между израз не съвпада с нито шаблон етикет случай управлението се насочва към списъка с етикет случай подразбиране а (ако има такъв). Ако няма етикет случай по подразбиране, без оператори или не са изпълнени в един превключвател раздел, и оператора на ключа губи контрол.
За повече информация относно отчета за превключване и сравняване на шаблоните, вижте. В шарката на раздел съвпадение с изявление превключвател.
Тъй като C # поддържа само 6 шаблонни константи и не позволява повторението на постоянни стойности, дело етикет определи взаимно изключващи се ценности и съвпадение изрази могат да се сравняват само един модел. В тази връзка, реда на показване на делото на операторите няма значение.
Въпреки това, тъй като в C # 7 са подкрепени от други шаблони, дело на етикети не е необходимо да се определи като взаимно изключващи се ценности и съвпадение израз могат да се сравняват различни модели. От раздела за превключване се извършват само операторите, които съдържат първата съвпадение модел, реда на показване на изявление случай става важно. Намирането раздел се ключ, оператор или оператори, които са еквивалентни на предишния оператор и са подгрупа от тях, C # генерира грешка CS8120 съставител "изявление превключвател етикет изявление случай случай вече е разглеждала предходната марка."
Следният пример показва отчета за превключване с помощта на различни шаблони не са взаимно изключващи се. В случай че тя раздел превключвател 0: движения и престава да бъде първия дял в изявление превключвател. C # въпрос грешка компилатор, защото стойността на цяло число нула представлява подгрупа от числа - шаблон определя случай Int Val оператор.
Разрешите този проблем и предупреждение компилатор по един от двата начина:
промяна на реда на превключване секции;
при поставяне на офертата, в случай на етикета.
Tag случай подразбиране
Tag случай подразбиране точки до ключа дял, който ще бъде изпълнен, ако изразът съвпадение не съвпада с всеки друг случай етикет. Ако никакъв случай по подразбиране етикет и съвпадение на изразяване не съвпада с всеки друг случай етикет. програмата се прехвърля на превключвателя на оператора.
етикет дело по подразбиране може да бъде показван в изявление превключвател в произволен ред. Той винаги е оценена на последно място, след оценка на всички случай на етикети. независимо от техния ред.
Модел за съвпадение с превключвател оператор
Всеки случай се определят по образец, че в случай на съвпадение със съответния израз е включена в изпълнението на неговите раздел ключ. Постоянно шаблон поддържа всички версии на C #. Други шаблони се поддържат като се започне с C # 7.
постоянна тенденция
Постоянни проверки шаблонни дали изразът е равен на определен постоянна. Той има следния синтаксис:
е постоянна - стойността да бъде проверен. Стойността на константата може да бъде някой от следните постоянни изрази:
Една постоянна експресия се изчислява както следва.
Ако ИЗРАЗът са постоянни и целочислени типове, оператор C # равенство определя дали изразът връща вярно (т.е. дали да се направи ИЗРАЗът == постоянно състояние).
В противен случай, стойността на експресията се определя чрез извикване на статичния метод Object.Equals (ИЗРАЗ, постоянно).
В следващия пример, постоянна тенденция се използва за определяне дали конкретна дата изтича в почивен ден, на първия или последния работен ден от седмицата или в средата на седмицата. Той сравнява DateTime.DayOfWeek собственост на текущия ден с членовете на ден от седмицата на изброяване.
константи шаблона Следващият пример, използвани за обработка на данни, въведени от потребителя при прилагането на конзолата, която симулира кафе-машина.
тип шаблон
тип шаблон осигурява точно определяне и вид реализация. Ако използвате изявление ключ към картата моделите той проверява дали изразът може да се превърне определения вид, и, ако е възможно, това води до променлива от този тип. Той има следния синтаксис:
Тук пишете - това име вид, в който е резултат от ИЗРАЗът трябва да се преобразува. VARNAME - е обект, който се превръща ИЗРАЗ резултат. Ако сравнението успява.
Експресия случай има стойност вярно. ако едно от следните условия:
ИЗРАЗ е например от същия тип като тип;
ИЗРАЗ е пример на тип, получен от тип. С други думи, ИЗРАЗът резултат може да се даде за увеличаване на типа например.
ИЗРАЗът е вид по време на компилацията, който е базов клас за тип. ИЗРАЗ и има вида на среда за изпълнение, който е вид или производно от тип. По време на компилацията тип променлива е променлива тип са дефинирани в типа на дефиниция. изпълнение променлива тип представлява например от типа, определен за тази променлива.
ИЗРАЗът е инстанция на даден тип, който реализира тип интерфейс.
Ако случаят е настроен да е истина, VARNAME се определя по определен начин и получава на местно ниво в рамките на превключвателя за раздел.
Имайте предвид, че нула не е подходящ за типа. За сравнение, използвайте следната нула случая марки:
В следващия пример, типа на шаблон се използва за предоставяне на информация за различните видове видове събиране.
Без картографиране шаблони, че кодът може да се запише по следния начин. Когато се използва тип шаблон, и създава по-кратък четим код, където се изисква резултат на проверка на трансформация (нула) или да извърши повторно редукция.
Отчетът за случай и когато клауза
Започвайки с C # 7, операторите случай не трябва да бъде взаимно изключващи се. Във връзка с тази оферта, можете да добавите кога. определяне на допълнителното условие, че операторът трябва да спазва случай да бъде настроен да е вярно. когато офертата може да бъде всеки израз, който се връща булева стойност. Най-често се използва, когато предложение за забрана на изпълнението на превключвателя на раздел, ако изразът съвпадение е нула.
Следващият пример дефинира база клас форма. Правоъгълник клас. получен от форма. и клас Square. получен от правоъгълник. Оферта, когато се използва, за да обработи един обект ShowShapeInfo правоъгълник. се определя на същата дължина и ширина като на обекта Square. дори ако инстанция не е създаден като обект площад за него. Методът не се опитва да се покаже информация за обекта или нула стойност. всяка форма на нула област.
Имайте предвид, че когато едно предложение в този пример, проверява дали обектът Shape е нула. Това не е изпълнено. Валидиране път за съществуването на стойностите на шаблона са нула - при нула.
C # Език Спецификация
За повече информация, вижте. В C # език спецификация. Спецификация Езикът е окончателно източник на информация за синтаксиса и използването на C # език.