Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

847
Visualizações
error CS0029: No se puede convertir implícitamente el tipo 'bool' a '(bool valorA, bool valorB)' c#

Tengo un problema, quiero hacer un Switch Case que diga quién ganó, quién perdió o si empataron (Venceu, Perdeu e Empatou).

Primero lo hice con valores enteros, con int valueA y valueB, donde si alguien gana vale 1, el que pierde vale 0 y empate, ambos valen 1.

Sin embargo, terminó dando el error:

error CS0029: no se puede convertir implícitamente el tipo 'bool' a '(int valueA, int valueB)'

Así que lo rehice usando valores booleanos, 1 = verdadero y 0 = falso.

Pero el error aún persiste y no sé cómo solucionarlo.

Este es mi código:

 if(Input.GetKey(key1)) // Vence { animBlue.SetBool("AzulTiro", true); valorA = true; } else if(animRed.GetBool("VermelhoTiro") == true) // Perde { animBlue.SetBool("AzulMorte", true); valorA = false; } if(Input.GetKey(key2)) // Vence { animRed.SetBool("VermelhoTiro", true); valorB = true; } else if(animBlue.GetBool("AzulTiro") == true) // Perde { animRed.SetBool("VermelhoMorte", true); valorB = false; } switch (valorA, valorB) { case (valorA == true && valorB == false): Debug.Log("Azul Venceu"); break; case (valorA == false && valorB == true): Debug.Log("Vermelho Venceu"); break; case (valorA == true && valorB == true): Debug.Log("Empatou"); break; }

Estoy bastante seguro de que el error está en el Switch, pero no sé qué es.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

sintaxis incorrecta, necesita

 switch (valorA, valorB) { case (true ,false): Debug.Log("Azul Venceu"); break; case (false , true): Debug.Log("Vermelho Venceu"); break; case (true, true): Debug.Log("Empatou"); break; }
over 4 years ago · Santiago Trujillo Relatório

0

¿Qué hay de la coincidencia de patrones si su C# es lo suficientemente moderno?

 var msg = (valorA, valorB) switch { (true, false) => "Azul Venceu", (false, true) => "Vermelho Venceu", _ => "Empatou" }; Debug.Log(msg);

Razoné que un falso/falso no ocurriría o también sería un empate. Si no es así, puede modificar la declaración:

 var msg = (valorA, valorB) switch { (true, false) => "Azul Venceu", (false, true) => "Vermelho Venceu", (false, true) => "Empatou", _ => null }; if(msg != null) Debug...

Recuerde que esta es una declaración que proporciona valor en lugar de una acción; recibirá quejas del compilador si no es exhaustivo (no cubre todos los valores de entrada posibles) y la forma más fácil de hacerlo es proporcionar el caso "else" _ . Además, debido a que proporciona valores en lugar de ejecutar código, es posible que deba inspeccionar el valor si está tomando una decisión de "hacer/no hacer".

No puede usar esto para ejecutar acciones que son nulas (suponiendo que Debug.Log devuelva void) de la misma manera que no puede poner vacíos en un ternario; el ternario produce valores:

 //no someBoolean? Debug.Log("yes") : Debug.Log ("no"); //yes Debug.Log(someBoolean? "yes" : "no");

Sin embargo, un truco que puede usar es usar un interruptor (o un ternario) para devolver una lambda que luego ejecuta

 Action a = (valorA, valorB) switch { (true, false) => () => Debug.Log("Azul Venceu"), (false, true) => () => Debug.Log("Vermelho Venceu"), (true, true) => () => Debug.Log("Empatou") _ => () => {} }; a(); //execute the returned action, which may be the do-nothing action

Estos interruptores devuelven un valor; cada uno devuelve una Acción y luego se puede invocar para realizar el registro

También se puede formar y ejecutar en una sola línea, aunque empieza a ponerse un poco "wtf?":

 ((valorA, valorB) switch { (true, false) => (Action)(() => Debug.Log("Azul Venceu")), (false, true) => () => Debug.Log("Vermelho Venceu"), (true, true) => () => Debug.Log("Empatou") _ => () => {} })();
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda