Ir para conteúdo

[C#] Switch/Case


SkelletonX

Posts Recomendados

Switch

 

Esta instrução é outro modo para simular o uso de varias instruções if e pode somente verificar uma relação de igualdade. Todos os tipos primitivos (int, string, decimal, etc) podem ser usados nas instruções switch/case.

 

Com relação à instrução case, ela avalia apenas o argumento que apresenta o mesmo tipo (string para string, int para int, etc) definido na instrução switch. Devemos ter muita atenção e cuidado ao fato de que o argumento da instrução case deve ser resolvido no tempo de compilação. Devido a isto, usamos uma variável constante com um valor literal na instrução case.

 

Vou dar um exemplo com int : 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SkelletonX
{
    class Program
    {
        static void Main(string[] args)
        {

            int caseSwitch = 1; 
            switch (caseSwitch)
            {
                case 1:
                    Console.WriteLine("se for 1 cai aqui");
                    break;
                case 2:
                    Console.WriteLine("se for 2 cai aqui");
                    break;
                default:
                    Console.WriteLine("se não for 1 ou 2 cai aqui");
                    break;
            }
            Console.ReadKey();
        }
    }
}

int caseSwitch = 1; // 1 = esse é o numero que vai escolher no case, como podemos ver temos o  : 

 case 1:
                    Console.WriteLine("se for 1 cai aqui");
                    break;

                             se o int caseSwitch = 1 é 1 vai cair no case 1 se for int caseSwitch = 2 vai cair no case 2 

                            podemos usar string no switch tbm

string diaDaSemana = Console.ReadLine();
  
             switch (diaDaSemana)
             {
                 case "Domingo":
                     Console.WriteLine("Você informou o dia 1");
                     break;
                 case "Segunda":
                     Console.WriteLine("Você informou o dia 2");
                     break;
                 case "Terça":
                     Console.WriteLine("Você informou o dia 3");
                     break;
                 case "Quarta":
                     Console.WriteLine("Você informou o dia 4");
                     break;
                 case "Quinta":
                     Console.WriteLine("Você informou o dia 5");
                     break;
                 case "Sexta":
                     Console.WriteLine("Você informou o dia 6");
                     break;
                 case "Sábado":
                     Console.WriteLine("Você informou o dia 7");
                     break;
             }

                               é a mesma coisa que o int porem é string. :D

 

Obs: O comando switch/case não pode usar operadores lógicos (&&, || ou !).

 

 

Podemos completar o uso da instrução switch/case com o comando default. Ele será executado sempre que o valor da variável em questão não encontrar um valor case correspondente, sendo assim o valor padrão. Aplicado a nosso exemplo a cima, ele ficaria assim:

 default:
                     Console.WriteLine("O dia informado não existe!");
                     break;     

            :D é isso

 

 

Lembrando Switch é bastente usado para fazer gerenciador de dados para emulador de jogos.

 

Ex:

private void handlePacket(byte[] buff)
        {
            ushort num = BitConverter.ToUInt16(new byte[] { buff[0], buff[1] }, 0);
            BitConverter.ToString(buff).Replace("-", " ");
            if (this.networkDebug)
            {
                string[] strArray = BitConverter.ToString(buff).Split(new char[] { '-', ',', '.', ':', '\t' });
                string str = "";
                foreach (string str2 in strArray)
                {
                    str = str + "0x" + str2 + " ";
                }
            }
            List<ReceiveBaseLoginPacket> list = new List<ReceiveBaseLoginPacket>();
            if (_isConnectedAviable)
            {
                switch (num)
                {
                    case 0xa0f:
                        list.Add(new opcode_2575_REQ(this, buff));
                        break;

                    case 0xa11:
                        list.Add(new CM_BASE_USER_LEAVE(this, buff));
                        break;

                    case 0xa13:
                        list.Add(new opcode_2579_REQ(this, buff));
                        break;

                    case 0xa5e:
                        list.Add(new CM_USER_LEAVE(this, buff));
                        break;

                    case 0xa01:
                    case 0xa03:
                        Thread.Sleep(500);
                        list.Add(new CM_BASE_LOGIN(this, buff));
                        break;

                    case 0xa05:
                        list.Add(new CM_BASE_GET_MYINFO(this, buff));
                        break;

                    case 0xa07:
                        list.Add(new CM_BASE_GET_MYFRIENDS(this, buff));
                        break;

                    case 0:
                        _isConnectedAviable = false;
                        break;

                    case 0xa65:
                        list.Add(new opcode_2660_REQ(this, buff));
                        break;

                    case 0xa6a:
                        list.Add(new opcode_2667_REQ(this, buff));
                        break;

                    case 0xa76:
                        list.Add(new opcode_2678_REQ(this, buff));
                        break;

                    default:
                        CLogger.getInstance().info_red("|[PB Server]| Opcode n\x00e3o encontrado: " + num);
                        break;
                }
                if ((list != null) && (list.ToArray().Length > 0))
                {
                    foreach (ReceiveBaseLoginPacket packet in list)
                    {
                        ThreadManager.runNewThread(new Thread(new ThreadStart(packet.run)));
                    }
                }
            }
        }
Editado por Skelleton
Link para o comentário
Compartilhar em outros sites

Legal, a mesma coisa que a maioria das linguagens c-like.

 

Ah, verificar se o list é nulo é redundante, tu ta instanciando ele logo acima, e não vejo necessidade de converter a lista pra Array só pra verificar o tamanho, tendo em mente que a próprio tipo List já tem um método pra pegar o tamanho.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...