Comparando cadenas en C# con OR en una declaración if

Soy un novato en C #, pero parece que no puedo encontrar nada sobre este problema. Esto es lo que estoy tratando de hacer:

string testString = txtBox1.Text;
string testString2 = txtBox2.Text;

if ((testString == "") || (testString2 == ""))
{
    MessageBox.Show("You must enter a value into both boxes");
    return;
} 

Básicamente, necesito verificar si txtBox1 o txtBox2 están en blanco. Sin embargo, recibo un error al ejecutar esto. ¿Cuál es la forma correcta de hacer esto (o mi enfoque es incorrecto)?

preguntado el 01 de julio de 12 a las 17:07

¿Qué significa "aceptar"? -

lo siento, he aclarado el problema, mi pregunta original no incluía todo por completo. Presioné guardar demasiado pronto antes de darme cuenta de que no cubría el problema real que estaba teniendo. -

Cual es el error? -

En el ejemplo de código que proporcionó, falta un paréntesis cerrado ')' en el if. -

@Tibi: el código me parece bien. -

6 Respuestas

Dado que desea verificar si los cuadros de texto contienen algún valor o no, su código debería hacer el trabajo. Deberías ser más específico sobre el error que estás teniendo. También puedes hacer:

if(textBox1.Text == string.Empty || textBox2.Text == string.Empty)
   {
    MessageBox.Show("You must enter a value into both boxes");
   }

EDIT 2: basado en los comentarios de @JonSkeet:

No se requiere el uso de string.Compare según la publicación original sin editar de OP. Cadena.Equals debería hacer el trabajo si uno quiere comparar cadenas, y StringComparison puede usarse para ignorar mayúsculas y minúsculas para la comparación. string.Compare debe usarse para la comparación de pedidos. Originalmente la pregunta contiene esta comparación,

string testString = "This is a test";
string testString2 = "This is not a test";

if (testString == testString2)
{
    //do some stuff;
}

la sentencia if puede ser reemplazada por

if(testString.Equals(testString2))

o siguiendo para ignorar mayúsculas y minúsculas.

if(testString.Equals(testString2,StringComparison.InvariantCultureIgnoreCase)) 

respondido 11 mar '15, 16:03

Yo personalmente sugeriría usar Equals para igualdad comparaciones Para eso está ahí, después de todo. - jon skeet

@JonSkeet, estoy de acuerdo, no estaba seguro acerca de la publicación original sin editar, si el OP quiere comparar la igualdad o quiere comparar las cadenas ignorando el caso, - Habib

¿Por qué diablos importaría el caso cuando el OP está comparando las cadenas que se están vacío? Incluso si tú do desea hacer una comparación que no distinga entre mayúsculas y minúsculas, aún puede usar Equals con un StringComparison, que es más claro que usar Compare OMI. Compare debe ser usado para un solicite comparación, no igualdad. Me sorprende que esta respuesta haya sido aceptada, ya que no puedo ver cómo ayuda al OP con la pregunta como se indica. - jon skeet

@JonSkeet, ese fue mi error al entender que el OP quiere comparar cadenas, no las cadenas vacías. Anteriormente había dos variables de cadena con valores y OP las comparaba usando ==, luego la publicación editada especificó la comparación con una cadena vacía. Incluso me sorprende que se acepte la respuesta. Probablemente debido a la parte editada de la comparación. textBox1.Text == string.Empty, pero nuevamente hay otras respuestas usando Equals que son mucho mejores - Habib

¿Puedes mencionar la razón para usar string.Empty más bien que "", si hay alguno? No soy un buen programador de C# (solo experto en Java/Scala) y el punto de string.Empty existir en absoluto no está claro para mí. - Blaisorblade

Aquí hay una forma más válida que también verifica si su cuadro de texto está lleno solo con espacios en blanco.

// When spaces are not allowed
if (string.IsNullOrWhiteSpace(txtBox1.Text) || string.IsNullOrWhiteSpace(txtBox2.Text))
  //...give error...

// When spaces are allowed
if (string.IsNullOrEmpty(txtBox1.Text) || string.IsNullOrEmpty(txtBox2.Text))
  //...give error...

La respuesta editada de @ Habib.OSU también está bien, este es solo otro enfoque.

Respondido 06 Jul 12, 23:07

en sus comentarios tenía el 'no' en el lugar equivocado, si los nombres de los métodos tienen algún sentido. Supuse que era un error tipográfico y edité la respuesta, corríjala si la actual es realmente incorrecta (pero luego explique la rareza). - Blaisorblade

@Blaisorblade No. En el código de OP, arroja un mensaje de error cuando la cadena es igual a vacía o contiene espacios en blanco, por lo que if string is empty, then throw the error or if string is white-space throw the error. - Code0987

Ya veo, lo siento. Pensé que habías implementado la introducción. He agregado comentarios para aclarar la respuesta. - Blaisorblade

try

if (testString.Equals(testString2)){
}

Respondido 01 Jul 12, 17:07

Esto es correcto, no tengo idea de por qué alguien votaría en contra de esto además de ser un duplicado pero publicado exactamente al mismo tiempo. No importa el idiota amigo - eric herlitz

La pregunta no se trata de comparar las dos cadenas entre sí; el código debe verificar si alguno está vacío. Sin embargo, la pregunta original era diferente y esta fue una respuesta sensata, por lo que los votos negativos probablemente no sean apropiados. - Blaisorblade

El código proporcionado es correcto, no veo ninguna razón por la que no funcione. También podrías intentar if (string1.Equals(string2)) como se sugiere.

Que hacer if (something OR something else), Utilizar ||:

if (condition_1 || condition_2) { ... }

Respondido 01 Jul 12, 17:07

utilizan el if (testString.Equals(testString2)).

Respondido 01 Jul 12, 17:07

La pregunta no se trata de comparar las dos cadenas entre sí; el código debe verificar si alguno está vacío. Sin embargo, la pregunta original era diferente y esta fue una respuesta sensata, por lo que los votos negativos probablemente no sean apropiados. - Blaisorblade

Tratar:

    if (textBox1.Text == "" || textBox2.Text == "")
    {
        // do something..
    }

En lugar de:

    if (textBox1.Text == string.Empty || textBox2.Text == string.Empty)
    {
        // do something..
    }

Porque string.Empty es diferente a - "".

Respondido el 24 de Septiembre de 17 a las 18:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.