Comutator pentru cuvinte cheie (referință pentru c #), documente Microsoft

În acest articol,

Comutatorul - este alegerea operatorului care alege să efectueze o secțiune de comutare din lista de candidați, comparându-le cu expresia corespunzătoare.

Instrucțiunea switch este adesea folosit în loc de structura if-else. Dacă o expresie este compensată împotriva a trei sau mai multe condiții. De exemplu, următoarea declarație de comutare determină dacă tipul de culoare este una dintre cele trei valori ale variabilelor:

Acest lucru este echivalent cu următorul exemplu, în care este utilizat în cazul în care construcția - altceva.

Expresia corespunzătoare

Potrivire expresie oferă o valoare pentru comparație cu etichetele șablon în caz. Ea are următoarea sintaxă:

În C #, 6 expresie de potrivire trebuie să fie o expresie care returnează valoarea următoarelor tipuri:

Deoarece C # 7, expresia de potrivire poate fi orice expresie, diferită de NULL.

comutator secțiune

Instrucțiunea switch este format din comutator una sau mai multe partiții. Fiecare secțiune a comutatorului conține cazul în care una sau mai multe etichete. urmat de unul sau mai mulți operatori. Următorul exemplu arată o declarație simplu comutator cu comutator trei secțiuni. Fiecare secțiune conține un comutator caz etichetă, cum ar fi caz 1. și doi operatori.

Un comutator operator poate cuprinde orice număr de secțiuni de comutator, iar fiecare tastă poate avea una sau mai multe etichete de caz (așa cum se arată în exemplul următor). Cu toate acestea, două etichete de caz nu poate conține aceeași expresie.

Efectuează doar comutatorul de secțiune într-o declarație comutator. C # nu permite să continuați cu următorul comutator secțiune după secțiunea anterioară. În acest sens, următorul cod creează un compilator eroare CS0163: „Managementul nu poate fi transmisă de la un caz marca () într-un alt“

De obicei, această cerință îndeplinită clar în afara secțiunii de comutare folosind instrucțiunea break. goto sau retur. În acest caz, să presupunem, de asemenea, următorul cod, deoarece asigură că gestionarea programului nu vor fi transmise implicit comutatorul de secțiune.

Executarea listei operatorilor în secțiunea de comutare marcat un caz, comparația adecvată de exprimare, începe cu prima declarație, iar lista poate continua, de obicei, până când operatorul de tranziție, cum ar fi o pauză. caz Goto. goto eticheta. a reveni sau arunca. În acest moment, controlul este transferat în afara declarației de comutare, sau într-un alt caz tag-ul. Declarație Goto. dacă se utilizează, trebuie să transfere controlul pentru a eticheta tipul constant. Această restricție este necesară, deoarece încercarea de a transfera controlul de tip etichetă variabilă poate avea efecte secundare nedorite, cum transferul controlului către o locație neintenționată în codul sau creând o buclă infinită.

caz tag-ul

Fiecare semn indică un caz pentru comparație cu potrivire model de expresie (caseSwitch variabilă în exemplul anterior). În cazul în care acestea se potrivesc, se trece pentru a comuta secțiune, care conține primul caz propriu-zis de timbru. În cazul în care o comparație a expresiei nu se potrivește cu orice șablon etichetă caz, controlul este transferat în lista cu o etichetă implicită caz ​​(dacă este disponibilă). În cazul în care nici o etichetă caz ​​implicit, nici un operator sau nu sunt îndeplinite într-un comutator de secțiune, iar operatorul de comutare pierde controlul.

Pentru mai multe informații despre declarația de comutare și compararea template-uri, a se vedea. În modelul secțiunea de potrivire cu o declarație comutator.

Deoarece C # acceptă numai 6 constante șablon și nu permite repetarea unor valori constante, caz tag-ul definesc valorile se exclud reciproc, și expresii de potrivire se poate potrivi doar un singur model. În acest sens, ordinea de afișare a cazului operatorilor nu contează.

Cu toate acestea, pentru că în C # 7 sunt susținute de alte template-uri, etichete de caz nu trebuie să fie definite ca valori care se exclud reciproc, și de potrivire de expresie se poate compara mai multe modele. Deoarece secțiunea de comutare se efectuează numai operatorilor care conțin primul model de potrivire, ordinea de afișare a unei declarații de caz devine importantă. Găsirea comutator secțiune, operatorul sau operatorii care sunt echivalente cu operatorul anterior și sunt un subset de ele, C # generează un compilator CS8120 eroare „declarație comutator etichetă caz ​​declarație caz procesat deja marca anterioară.“

Următorul exemplu arată declarația de comutare folosind o varietate de template-uri care nu se exclud reciproc. În cazul în care secțiunea de întrerupător 0: mută și încetează să mai fie prima partiție într-o declarație comutator. C # problemă o eroare de compilator, deoarece valoarea întreagă de zero reprezintă un subset de numere întregi - șablonul determinat operatorul de caz int val.

Rezolvați această problemă și un avertisment compilator într-unul din cele două moduri:

schimbarea ordinii secțiunilor de comutare;

la introducerea ofertei în cazul în care eticheta.

Implicit caz Tag

puncte de etichete caz implicit la comutatorul de partiție, care va fi executat în cazul în care expresia de potrivire nu coincide cu nici un alt caz etichetă. În cazul în care nici o etichetă caz ​​implicit și expresia de potrivire a nu coincide cu nici un alt caz etichetă. programul este transferat la comutatorul operatorului.

Eticheta implicită Cauza poate fi afișat într-o declarație de comutare, în orice ordine. Este întotdeauna evaluată ultima, după evaluarea tuturor cazul etichetelor. indiferent de ordinea lor.

Model de potrivire cu operatorul comutator

Fiecare caz definește un model care, în cazul coincidență cu expresia corespunzătoare este inclusă în performanța secțiunii sale comutator. Șablonul Constant suporta toate versiunile de C #. Alte șabloane sunt acceptate începând cu C # 7.

model constant

verifică șablon Constant dacă expresia este egală cu constanta specificată. Ea are următoarea sintaxă:

este constantă - valoarea care trebuie verificată. Valoarea constantei poate fi oricare dintre următoarele expresii constante:

O expresie constantă se calculează după cum urmează.

Dacă expr sunt constante și tipuri întregi, operatorul C # egalitatea determină dacă expresia returnează adevărat (adică, dacă să efectueze expr == stare constantă).

In caz contrar, valoarea expresiei este determinată prin apelarea Object.Equals metodei statice (expr, constantă).

În exemplul următor, un model constant este utilizat pentru a determina dacă o anumită dată cade pe un week-end, prima sau ultima zi lucrătoare a săptămânii sau în timpul săptămânii. El compară DateTime.DayOfWeek de proprietate în ziua curentă cu membrii DAYOFWEEK enumerare.

Constantele șablon Următorul exemplu folosite pentru procesarea datelor introduse de către utilizator la aplicația consola care simulează o mașină de cafea.

șablon de tip

șablon tip oferă o determinare și tip de conversie corectă. Dacă utilizați o declarație comutator pentru a mapa modelele pe controale pentru a vedea dacă expresia poate fi convertit la tipul specificat, și, dacă este posibil, aceasta duce la o variabilă de acest tip. Ea are următoarea sintaxă:

Aici tip - acest nume de tip, în care trebuie să fie convertite rezultatul expr. varname - este un obiect, care este convertit rezultat expr. În cazul în care comparația reușește.

Expresia caz are valoarea reală. în cazul în care una dintre următoarele condiții:

expr reprezintă o instanță de același tip ca și tipul;

expr este un exemplu de un tip derivat de tip. Cu alte cuvinte, expr rezultat poate fi administrat pentru a crește tipul de instanță.

expr este un tip de compilare-timp, care este clasa de bază pentru tipul. expr și are tipul de mediu de rulare, care este un tip sau un derivat de tip. Compilării timp tip de variabilă este un tip de variabilă definită în tipul de definiție. Tipul de variabilă de execuție reprezintă o instanță a tipului atribuit acelei variabile.

expr este o instanta a unui tip care implementează tipul de interfață.

În cazul în care cazul este setat la true, varname i se atribuie un anumit fel și devine zona locală în cadrul secțiunii comutatorului.

Rețineți că nul nu este potrivit pentru tipul. Pentru comparație, utilizați următorul caz marca nulă:

În exemplul următor, tipul de șablon este folosit pentru a furniza informații despre diferitele tipuri de tipuri de colectare.

Fără cartografiere template-uri care cod poate fi scris după cum urmează. Când se utilizează un tip de șablon, și creează un cod care poate fi citit mai concis, în care este necesar rezultatul verificarii transformare (nul) sau efectua re-reducere.

Declarația de caz și atunci când clauza

Începând cu C # 7, caz declarații nu trebuie să se excludă reciproc. În legătură cu această ofertă, puteți adăuga atunci când. definind condiția suplimentară ca operatorul trebuie să respecte un caz, care urmează să fie setat la true. atunci când o ofertă poate fi orice expresie care returnează o valoare booleană. Cel mai adesea folosit atunci când o propunere de a interzice executarea comutatorului secțiunii, în cazul în care expresia de potrivire este nulă.

Următorul exemplu definește o formă de clasă de bază. clasa dreptunghi. derivată din forma. și o clasă Square. derivată din dreptunghi. Oferta atunci când este utilizat pentru a procesa un singur obiect ShowShapeInfo dreptunghi. i se atribuie aceeași lungime și lățime ca obiect pătrat. chiar dacă instanța nu este creat ca un obiect pătrat pentru el. Metoda nu încearcă să afișeze informații despre obiectul sau nul de valoare. orice formă de zona zero.

Rețineți că, atunci când o propunere în acest exemplu, verifică dacă obiectul Shape este nul. Nu este îndeplinită. calea de validare pentru existența valorilor șablon sunt nule - caz nul.

C # Specificații Limba

Pentru mai multe informații, consultați. În caietul de sarcini limbaj C #. Specificarea limbii este sursa definitiv de informații despre sintaxa și utilizarea limbajului C #.