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

848
Views
error CS0029: Cannot implicitly convert type 'bool' to '(bool valorA, bool valorB)' c#

I'm having a problem, I want to make a Switch Case that says who won, who lost or if they drew ( Venceu, Perdeu e Empatou).

I did it first with integer values, with int valueA and valueB, where if someone wins it's worth 1, whoever loses it's 0 and a tie, both are worth 1.

However, it ended up giving the error:

error CS0029: Cannot implicitly convert type 'bool' to '(int valueA, int valueB)'

So I redid using boolean values, 1 = true and 0 = false.

But the error still persists and I don't know how to fix it.

This is my code:

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;
    }

I'm pretty sure the error is on the Switch but I don't know what it is

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

wrong syntax, you need

  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

How about pattern matching if your C# is modern enough?

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

Debug.Log(msg);

I reasoned that a false/false would either not occur, or be a draw too. If it isn't then you can tweak the statement:

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

if(msg != null) Debug...

Remember that this a value-providing statement rather than an action-taking one; you'll get complaints from the compiler if it isn't exhaustive (doesn't cover all possible input values) and the easiest way to make it so is to provide the "else" case _. Also because it's providing values rather than performing code, you might need to inspect the value if you're making a "do/don't" decision.

You can't use this to run actions that are void (assuming Debug.Log returns void) in the same way you can't put voids in a ternary; the ternary produces values:

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

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

One trick you can pull, however, is to use a switch (or a ternary) to return a lambda that you then execute

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 

These switches do return a value; they each return an Action and later it can be invoked to carry out the logging

It can also be formed and executed in one line, though it starts to get a bit "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!