web-dev-qa-db-fra.com

c # 8 changer d'expression plusieurs cas avec le même résultat

Comment une expression de commutateur doit-elle être écrite pour prendre en charge plusieurs cas retournant le même résultat?

Avec c # avant la version 8, un commutateur peut être écrit comme suit:

var switchValue = 3;
var resultText = string.Empty;
switch (switchValue)
{
    case 1:
    case 2:
    case 3:
        resultText = "one to three";
        break;
    case 4:
        resultText = "four";
        break;
    case 5:
        resultText = "five";
        break;
    default:
        resultText = "unkown";
        break;
}

Lorsque j'utilise la syntaxe d'expression c # version 8, c'est comme ça:

var switchValue = 3;
var resultText = switchValue switch
{
    1 => "one to three",
    2 => "one to three",
    3 => "one to three",
    4 => "four",
    5 => "five",
    _ => "unknown",
};

Donc ma question est: comment faire les cas 1, 2 et 3 en un seul interrupteur-bras de sorte que la valeur n'a pas besoin d'être répétée?

Mise à jour par suggestion de " Rufus L ":

Pour mon exemple donné, cela fonctionne.

var switchValue = 3;
var resultText = switchValue switch
{
    var x when (x >= 1 && x <= 3) => "one to three",
    4 => "four",
    5 => "five",
    _ => "unknown",
};

Mais ce n'est pas exactement ce que je veux accomplir. Il s'agit toujours d'un seul cas (avec une condition de filtre), pas de plusieurs cas donnant le même résultat de droite.

35
huzle

Si votre type de commutateur est une énumération d'indicateurs

[System.Flags]
public enum Values 
{
    One = 1, 
    Two = 2, 
    Three = 4,
    Four = 8,
    OneToThree = One | Two | Three
}

var resultText = switchValue switch
{
    var x when Values.OneToThree.HasFlag(x) => "one to three",
    Values.Four => "4",
    _ => "unknown",
};
0
pcchan