Dica rápida de certificação 2: comandos switch
O comando switch possui uma série de especificidades que podem cair como armadilha em um exame de certificação .NET. Os pontos que eu ressalto são:
1) Em Java, um comando switch poderia avaliar apenas "expressões que pudessem ser convertidas implicitamente para int", como byte, short, char e o próprio int. Em C#, além disso, um bloco switch pode avaliar expressões do tipo string e enum. No caso de um string, um case do switch pode conter o valor "null".
2) Dois cases com o mesmo valor geram erro de compilação
3) Um case que contenha um comando deve ter um break explícito. Caso contrário, o seguinte erro acontecerá: Control cannot fall through from one case label to another
4) Entretanto, é possível deixar um case sem nenhum comando, como mostra o código abaixo:
switch (i) {
case 1:
case 2:
Console.WriteLine("valor foi 1 ou 2");
break;
}
5) É possível ter um goto no case de um switch, desviando o código para outro case, como exibido abaixo:
switch (i) {
case 1: goto case 3;
case 2:
Console.WriteLine("valor foi 2");
break;
case 3:
Console.WriteLine("valor foi 1 ou 3");
break;
}
6) Muito estranho isso: no lugar de "case 3" acima, você poderia ter um rótulo qualquer, como "foo". Entretanto, o código determinado por esse rótulo nunca será atingido (o compilador o informa disso com um warning). Observação: esse label estranho não vai funcionar caso seja o primeiro label do switch, havendo no caso um erro de compilação.
7) O label "default" não é obrigatório e, quando existir, não precisa ser o último label do switch, embora isso seja uma boa prática de programação.
[]s
-- AFurtado