2011-02-04 25 views
10

estoy usando C#Cómo convertir variable de sesión en entero Tipo en C#

Estoy tratando de comprobar si mi intento de inicio de sesión no es más que 3, quiero decir con la condición abajo

if (((int)Session["LoginAttempt"]) != 3) 
{ 
} 

Login condición no estoy haciendo de la subasta, como a continuación:

Session["LoginAttempt"] = ((int) Session["LoginAttempt"]) + 1; 

Pero está dando me error "referencia a objeto no establecida como instancia de un objeto."

¡Por favor sugiéra!

Respuesta

16

siento chicos,

acabo de cambiar el entero conversión de código de

((int) Session["LoginAttempt"]) 

a

Convert.ToInt32(Session["LoginAttempt"]) + 1; 

y ahora se está trabajando muy bien para mí, por favor, sugiera encajona de cualquier problema en esto

Gracias!

4

Debe probar para ver si la variable Session existe antes de que pueda usarla y asignarla.

Aquí está haciendo una subasta:

Session["LoginAttempt"] = ((int) Session["LoginAttempt"]) + 1;

Pero, si el Session["LoginAttempt"] no existe, esto explicará su error. Una prueba rápida null antes del incremento debería solucionarlo.

if (Session["LoginAttempt"] != null) 
    Session["LoginAttempt"] = ((int)Session["LoginAttempt"]) + 1; 
0

¿Está en algún momento inicializándolo antes de intentar recuperarlo o aumentarlo?

0

dividir su código no trivial en partes:

int sessionLogicAttempt = (int)Session["LoginAttempt"]; 
int someValue = sessionLogicAttempt + 1; 
Session["LoginAttempt"] = someValue; 

Además, agregue afirmaciones para comprobar los valores que está asumiendo.

1

Lo hará la primera vez que intente configurarlo si no lo ha inicializado previamente. Tal vez puedas probar:

if (Session["LoginAttempt"] == null) 
    Session["LoginAttempt"] = 1; 
else 
    ((int)Session["LoginAttempt"]) += 1; 
0
//read 
object attemptObj = Session["LoginAttempt"] 
int attempt = 0; 
if (attemptObj != null) attempt = (int)attemptObj ; 

////write 
Session["LoginAttempt"] = attempt++; 
7

Prueba el código mágico:

Session["LoginAttempt"] = ((int?)Session["LoginAttempt"] ?? 0) + 1; 

Esto convertirá la variable de sesión Session["LoginAttempt"] a un anulable int (un int que puede ser null) la ?? 0 proporciona un valor 0 si es nulo, entonces el cálculo tiene éxito.

El Session["LoginAttempt"] puede ser nulo si no se ha inicializado antes.

0

intente asegurarse de no emitir algo que posiblemente sea un valor nulo.

int i = Session["val"] == null ? 0 : (int)Session["val"]; 

aunque esto podría estropearlo también si algún otro programador usa su sesión "val" y pone un valor no int allí.

 int y = 0; 
     if (int.TryParse(Session["val"] == null ? string.Empty : Session["val"].ToString(), out y)) 
     { 
      // got your int value 
     } 
     else 
     { 
      // no int value in session val 
     } 
3

Por qué no encapsula el valor LoginAttempt como una propiedad y auto-asignar un valor:

protected int LoginAttempt 
{ 
    get 
    { 
     if (Session["LoginAttempt"] == null) 
     { 
      Session["LoginAttempt"] = 1; 
     } 
     return Convert.ToInt32(Session["LoginAttempt"].ToString()); 
    } 
    set 
    { 
     Session["LoginAttempt"] = value; 
    } 
} 

para que el cuerpo principal de la función es más legible:

if (LoginAttempt < 3) 
{ 
} 
Cuestiones relacionadas