Curiosidades C# – Switch Case When

Como as instruções ‘case‘ não precisam ser mutuamente exclusivas (podemos estabelecer o tipo diretamente no ‘case‘, a partir do C# 7.0), você pode usar a adição de uma cláusula ‘when‘ para especificar uma condição adicional que precisa ser atendida para que a instrução case seja avaliada como true.

A cláusula ‘when‘ pode ser qualquer expressão que retorna um valor booliano.

Exemplo:

using System;
namespace SwitchWhenClause
{
    class Program
    {
        static void Main(string[] args)
        {
            MySwitchCaseObject((int)1); // => Cast for sample only
            MySwitchCaseObject((string)"False"); // => Cast for sample only
            MySwitchCaseObject(null); 
            MySwitchCaseObject("other"); 
        }

        public static void MySwitchCaseObject(object booleanChoise)
        {
            switch (booleanChoise)
            {
                case int myInt when myInt == 1:
                case string myString when myString.Equals("true", StringComparison.OrdinalIgnoreCase):
                    Console.WriteLine("This entry is 'TRUE'");
                    break;
                case int myInt when myInt == 0:
                case string myString when myString.Equals("false", StringComparison.OrdinalIgnoreCase):
                    Console.WriteLine("This entry is 'FALSE'");
                    break;
                case null:
                    Console.WriteLine("Please do not send 'null' values");
                    break;
                default:
                    Console.WriteLine("Well, i dont know...");
                    break;
            }
        }
    }
}

/* This will print
This entry is 'TRUE'
This entry is 'FALSE'
Please do not send 'null' values
Well, i dont know...
*/

Qualquer dúvida ou dicas, entre em contato: leandrolt@gmail.com

Principais referências

– Livro: Pro C# 7: With .NET and .NET Core – Andrew Troelsen
– https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/switch

Leave a Reply

Your email address will not be published. Required fields are marked *