Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

857
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!