none
Switch não encerrou no Break, ele passou do Break e depois para outros Return'S sem ser encerrado ! RRS feed

  • Pergunta

  • Boa Noite Pessoal,

    Eu tenho uma função que é responsável por realizar verificações, nestas verificações a sintaxe que deve estar ser considerada válida é esta sintaxe: "~Letra~" ( EX ~b~ ) , deve estar conter todos os conteúdos se não resultaria em erro.

    Entretanto, nos casos em que estão "válidos" simplesmente não estão passando.

    Eu observei pelo debugging e simplesmente ele fez do impossível, ele passou o Break, não encerrou o Swith e passou para o return do Default e depois, ele passou para outro return de outro local fora do Swith... observe as print screen 

    Era para ele ter encerrado pelo Break, mas olhe aonde ele vai parar, no default do return, ele nem passou as outras instruções, foi direto ao ponto !

    Agora ao envés dele sair do return, ele passou para outro.

    O que pode ser?

    Código fonte:

    for(int i = 0; i < cbox_conteudoConverter.Text.Length; i++)
                {
                    int obter = cbox_conteudoConverter.Text.IndexOf('~', i);
                    if(obter != -1)
                    {
                        if(obter+2 < cbox_conteudoConverter.Text.Length)
                        switch(cbox_conteudoConverter.Text[obter + 1])
                        {
                                case 'n': //New Line - Nova Linha
                                case 'r': //Vermelho - Red
                                case 'g': //Verde - Green
                                case 'b': //Azul - Blue
                                case 'w': //Branco - Write
                                case 'y': //Amarelo - Yellow
                                case 'p': //Roxo - Purple
                                case 'l': //Preto - Black <--
    
                                case 'u':
                                case 'd':
                                case '<':
                                case '>':
                                        if (cbox_conteudoConverter.Text[obter + 2] == '~')
                                        {
                                            i += 2;
                                            break;
                                        }
                                        else MessageBox.Show(LOG_ErroSintaxeGameText, "ERRO de Sintaxe", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return;
                                                            
                                default:             
                                        MessageBox.Show(LOG_ErroSintaxeGameText, "ERRO de Sintaxe", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    return;
                          
                        }
                        else MessageBox.Show(LOG_ErroSintaxeGameText, "ERRO de Sintaxe", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

    segunda-feira, 13 de março de 2017 01:47

Respostas

  • Bom dia,

    Coloque o bloco else entre chaves. Isso provavelmente irá resolver:

    else
    {
        MessageBox.Show(LOG_ErroSintaxeGameText, "ERRO de Sintaxe", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }

    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta KDST terça-feira, 14 de março de 2017 19:07
    terça-feira, 14 de março de 2017 13:56
    Moderador

Todas as Respostas

  • Boa tarde,

    Eu fiz um teste aqui e o break saiu do switch.

    No seu código, ele está passando no teste deste if? :

     if (cbox_conteudoConverter.Text[obter + 2] == '~')

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 13 de março de 2017 17:09
    Moderador
  • Boa tarde,

    Eu fiz um teste aqui e o break saiu do switch.

    No seu código, ele está passando no teste deste if? :

     if (cbox_conteudoConverter.Text[obter + 2] == '~')

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    Sim, ele entra no if, incrementa a variável "i" e chega no break normalmente, mas o estranho é que magicamente, ao envés dele parar por ali, ele passa para os dois return's de baixo principalmente no default.

    Um exemplo: "~u~Teste." , ele falha do mesmo jeito, passa o break para os dois últimos returns abaixo, nunca vi algo do gênero.

    Eu substitui a List View por um string para tentar ajudar:

    string teste = "~u~Teste.";
    for(int i = 0; i < teste.Length; i++)
                {
                    int obter = teste.IndexOf('~', i);
                    if(obter != -1)
                    {
                        if(obter+2 < teste.Length)
                        switch(teste[obter + 1])
                        {
                                case 'n': //New Line - Nova Linha
                                case 'r': //Vermelho - Red
                                case 'g': //Verde - Green
                                case 'b': //Azul - Blue
                                case 'w': //Branco - Write
                                case 'y': //Amarelo - Yellow
                                case 'p': //Roxo - Purple
                                case 'l': //Preto - Black <--
    
                                case 'u':
                                case 'd':
                                case '<':
                                case '>':
                                        if (teste.Text[obter + 2] == '~')
                                        {
                                            i += 2;
                                            break;
                                        }
                                        else MessageBox.Show(LOG_ErroSintaxeGameText, "ERRO de Sintaxe", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return;
                                                            
                                default:             
                                        MessageBox.Show(LOG_ErroSintaxeGameText, "ERRO de Sintaxe", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    return;
                          
                        }
                        else MessageBox.Show(LOG_ErroSintaxeGameText, "ERRO de Sintaxe", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                }


    segunda-feira, 13 de março de 2017 22:27
  • Bom dia,

    Coloque o bloco else entre chaves. Isso provavelmente irá resolver:

    else
    {
        MessageBox.Show(LOG_ErroSintaxeGameText, "ERRO de Sintaxe", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }

    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta KDST terça-feira, 14 de março de 2017 19:07
    terça-feira, 14 de março de 2017 13:56
    Moderador