Pregunta

¿Es posible tener un interruptor en C # que verifique si el valor es nulo o está vacío y no " " pero String.Empty ? Sé que puedo hacer esto:

switch (text)
{
    case null:
    case "":
        break;
}

¿Hay algo mejor, porque no quiero tener una gran lista de declaraciones IF?

Estoy tratando de reemplazar:

if (String.IsNullOrEmpty(text))
    blah;
else if (text = "hi")
    blah
¿Fue útil?

Solución

Sugeriría algo como lo siguiente:

switch(text ?? String.Empty)
{
    case "":
        break;
    case "hi":
        break;
}

¿Es eso lo que estás buscando?

Otros consejos

¿Qué tiene de malo su ejemplo de switch declaración?

switch (text)
{
    case null:
    case "":
        foo();
        break;
    case "hi":
        bar();
        break;
}

Funciona (y por alguna razón eso me sorprendió, pensé que se quejaría o se bloquearía en el caso null ) y está claro.

Para el caso, ¿por qué te preocupa String.Empty ? Me falta algo aquí.

que tal

if (string.isNullOrEmpty(text))
{
   //blah
}
else
{
 switch (text)
 {
     case "hi":
 }

}

De la documentación de String.Empty :

  

El valor de este campo es el   cadena de longitud cero, " " ;.

Interpreto que esto significa que no hay diferencia entre " " y String.Empty . ¿Por qué estás tratando de distinguir entre ellos?

Una cadena vacía es " " ;, que es igual a String.Empty. La razón por la que puede poner " " en una declaración de caso pero no " String.Empty " es que " Vacío " es un campo de la clase "Cadena" y " " es en realidad un valor constante

Se permiten valores constantes en los casos, String.Empty es un campo y podría modificarse en tiempo de ejecución. (En este caso, seguirá siendo el mismo, pero no todos los campos estáticos de cada clase son valores constantes).

En el caso de 'if', esa condición se evalúa en tiempo de ejecución y si no requiere un valor constante.

Espero que esto explique por qué.

¡Algo que acabo de notar es que puede combinar if / else y cambiar declaraciones! Muy útil cuando necesita verificar las condiciones previas.

if (string.IsNullOrEmpty(text))
{
    //blah
}
else switch (text)
{
    case "hi":
        Console.WriteLine("How about a nice game of chess?");
        break;
    default:
        break;
}
string StrMode;
if (!string.IsNullOrEmpty(StrMode))
{  
    switch (StrMode.Trim())
    {
        case "Souse":
        {
             //Statement Eg:  
             MesssageBox.Show("Souse");
             break;
        }

        case "Company Agent":
        {
             //Statement Eg:
             MesssageBox.Show("Souse");
             break; 
        }

        default:
             return;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top