Home > OS >  Anonymous variable in when expression of switch statements
Anonymous variable in when expression of switch statements

Time:10-26

I want to deal with multi condition with switch. Here is my code:

string i="a1";
switch (i)
{
    case string X when X.Contains("a", StringComparison.OrdinalIgnoreCase):
    case string Y when Y.Contains("b", StringComparison.OrdinalIgnoreCase):
    case string Z when Z.Contains("c", StringComparison.OrdinalIgnoreCase):
    case string A when A.Contains("d", StringComparison.OrdinalIgnoreCase):
        {
            //some logic
            break;
        }
    case string X when X.Contains("e", StringComparison.Ordinal):
        {
            //some logic     
            break;
        }                               
}

As you see, the variable X/Y/Z/A in the switch statement is useless for me while I have to declare them every time.

Is there any way I can achieve it without declaring so many useless variables?

CodePudding user response:

You can use a type matching pattern without introducing a new pattern variable, and then refer to i in the guard clause:

string i = "a1";
switch (i)
{
    case string when i.Contains("a", StringComparison.OrdinalIgnoreCase):
    case string when i.Contains("b", StringComparison.OrdinalIgnoreCase):
    case string when i.Contains("c", StringComparison.OrdinalIgnoreCase):
    case string when i.Contains("d", StringComparison.OrdinalIgnoreCase):
    {
        // some logic
        break;
    }
    case string when i.Contains("e", StringComparison.Ordinal):
    {
        // some logic     
        break;
    }
}

CodePudding user response:

Why not just use if/else if?

if (i.Contains("a", StringComparison.OrdinalIgnoreCase) ||
    i.Contains("b", StringComparison.OrdinalIgnoreCase) || 
    i.Contains("c", StringComparison.OrdinalIgnoreCase) ||
    i.Contains("d", StringComparison.OrdinalIgnoreCase))
{
    // Some logic
}
else if (i.Contains("e", StringComparison.Ordinal))
{
    // some logic
}
  •  Tags:  
  • c#
  • Related