es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En C#, ¿Cómo realizar el emparejamiento de patrones con switch para un valor de cadena no constante?

En C#, ¿Cómo realizar un patrón de coincidencia con switch para un valor de cadena no constante?

Me gustaría poder utilizar variables de cadena no constantes como objetivo de coincidencia en una instrucción switch.

Tengo el siguiente código, pero me encuentro con el error CS0150: Se espera un valor constante en case expectedValue:

public bool UseStandardSwitch(string inputValue)
{
    var expectedValue = "SomeValue";

    bool result = default;
    var DoSomething = () => { result = true; };

    switch (inputValue)
    {
        case expectedValue:
            DoSomething();
            break;
        default:
            break;
    }
    return result;
}

¿Existe alguna forma de lograr un resultado similar?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes utilizar el emparejamiento de patrones con el switch para valores de cadena no constantes utilizando la palabra clave “when”. El código a continuación muestra cómo modificar el código existente para lograr esto:

    public bool UseStandardSwitch(string inputValue)
    {
        var expectedValue = "SomeValue";
    
        bool result = default;
        var DoSomething = () => { result = true; };
    
        switch (inputValue)
        {
            case string match when match == expectedValue:
                DoSomething();
                break;
            default:
                break;
        }
        return result;
    }
    

    En el código modificado, la declaración switch ahora utiliza un patrón que coincide con cualquier valor de cadena y filtra el resultado utilizando la palabra clave “when”. Esto te permite comparar el valor de la variable de entrada con cualquier valor de cadena no constante, como la variable expectedValue en este caso.

Comments are closed.