2010-05-24 8 views
5

Perdón por preguntar esto porque creía saber la respuesta, quiero salir del programa si userName tiene más de 4 caracteres o userName no es una cuenta llamada student. Sin embargo, incluso si el nombre de usuario solo tiene 3 caracteres y no es estudiante, todavía estoy presionando Application.Exit. ¿Qué estoy haciendo mal?C# simple SI O pregunta

if (userName.Length > 4 | userName != "student") 
{ 
    Application.Exit(); 
} 

La culpa es mía :-(

+0

esta afirmación no tiene sentido, porque su aplicación no saldrá solo en caso de que el nombre de usuario sea 'student'. – Andrey

+0

Lo que necesitaba era && como se muestra a continuación, ¡gracias a todos! :-) if (nombre de usuario.Length> 4 && userName! = "Estudiante") { Application.Exit(); } – Jamie

+0

@Jamie, de nuevo es inútil. '" student ".Length' is> 4 anyway :) – Andrey

Respuesta

15

Mientras debe utilizar en lugar de |||, que dará el mismo resultado en esta situación. A pesar de la votación ascendente de las demás respuestas, al cambiar | a || se no resolver su problema.

Su problema real es que las condiciones que desea verificar siempre serán ciertas. O su nombre de usuario no es student, o es student y luego también es más de 4 caracteres.

Cuando tiene un nombre de usuario que tiene solo 3 caracteres, no es igual a un alumno, por lo tanto, el programa se cierra.

Desde su descripción de lo que se espera, creo que quiere decir esto:

if (userName.Length > 4 && userName != "student") 
{ 
    Application.Exit(); 
} 
+0

Muchas gracias por esto :-) – Jamie

6

Usted necesita usar el booleano OR (||) en lugar de la operación OR (|)

Como ya he dicho en mis comentarios, sin embargo, la lógica . no necesariamente hace ningún sentido para mí la forma en que es escribir, la declaración será siempre cierto:

  • Si nombre de usuario no es estudiante, la declaración es true y la aplicación sale.

  • Si userName es student, entonces length> 4 y la declaración es verdadera otra vez (lo que causa una salida).

Se podía cambiar las cosas a:

if(username.Length > 4 && userName != "student") 
{ 
    Application.Exit(); 
} 

Cuál tiene más sentido lógicamente, pero ya no sé su intención de que no se puede garantizar que iba a funcionar de la manera que desea que .

+0

'if (userName.Length> 4 || userName! =" Student ")' significa menos? – Andrey

+0

Puede que sea mejor usar Form.Close en lugar de Application.Exit también (si es posible) http://stackoverflow.com/questions/1057151/application-exit –

+0

@Andrey Tiene razón, la lógica de la afirmación no tiene sentido claro ... pero no puedo ver el resto de su código para saber cuál sería la lógica correcta. todo lo que puedo ver es que obviamente está usando el operador equivocado para hacer su comparación. –

0
if (userName.Length > 4 || userName.ToLower() != "student") 
{ 
    Application.Exit(); 
} 

Pruebe esto.

+0

Aviso ToLower() – kd7

+0

El 'ToLower()' puede ser insignificante dependiendo de cómo la interfaz de usuario acepta la entrada. También puede ser un nombre de usuario sensible a mayúsculas y minúsculas ... – James

+0

aún más seguro, a veces te preguntas por qué la condición no está afectando y es simplemente una cuestión de caso. – kd7

0

De su análisis de sus necesidades su cheque por la longitud de caracteres es insignificante o por lo menos usted no ha mencionado la razón por la cual quieres verificar la longitud del char Del ejemplo que me proporcionaste, simplemente verificaría if (userName != "student"). No veo la necesidad de un cheque adicional; esto es algo que se puede forzar en la UI.

0

Si no estoy equivocado, está intentando ingresar al bucle if cuando cualquiera de las condiciones es verdadera. es decir, entra en el bucle si

  1. cuando la longitud es mayor que.
  2. cuando nombre de usuario no debe ser igual al "estudiante"

condición como nombre de usuario = "ABC" no es "estudiante", su condición sigue siendo la derecha y entrará. Se ejecutará aún cuando userName sea igual = "estudiante";

Aquí Debe usar el operador Y que simplemente el operador OR.

if (userName.Length > 4 & userName != "student") 
    { 
    Application.Exit();     
    } 

También puede conseguir el mismo resultado con & & operador. & opertor es igual que & & operador. cuando X = falso e Y es verdadero; Y no será evaluado en absoluto. Como X ya es falso. este es el método también es llamada evaluación de cortocircuito.