Как преобразовать переменную сеанса в целочисленный тип в С#
Я использую С#
Я пытаюсь проверить, не превышает ли моя попытка входа в систему 3, я имею в виду следующее условие:
if (((int)Session["LoginAttempt"]) != 3)
{
}
В состоянии сбоя при входе в систему я делаю приращение, как показано ниже:
Session["LoginAttempt"] = ((int) Session["LoginAttempt"]) + 1;
Но это выдает мне эту ошибку: "Ссылка на объект не установлена для экземпляра объекта".
Предложения, пожалуйста!
Ответы
Ответ 1
Извините, ребята,
Я просто изменил целочисленный код преобразования из
((int) Session["LoginAttempt"])
к
Convert.ToInt32(Session["LoginAttempt"]) + 1;
и теперь он отлично работает для меня, пожалуйста, предложите установить любые проблемы.
Спасибо!
Ответ 2
Попробуйте ввести волшебный код:
Session["LoginAttempt"] = ((int?)Session["LoginAttempt"] ?? 0) + 1;
Это преобразует переменную сеанса Session["LoginAttempt"]
в значение с нулевым значением int
(a int
, которое может быть null
); ?? 0
предоставляет значение 0, если оно равно null, поэтому вычисление завершается успешно.
Session["LoginAttempt"]
может быть нулевым, если он ранее не инициализирован.
Ответ 3
Вам нужно проверить, существует ли переменная Session
, прежде чем вы сможете ее использовать и назначить ей.
Здесь вы делаете приращение:
Session["LoginAttempt"] = ((int) Session["LoginAttempt"]) + 1;
Но, если Session["LoginAttempt"]
не существует, это объяснит вашу ошибку. Быстрый null
тест перед приращением должен отсортировать его.
if (Session["LoginAttempt"] != null)
Session["LoginAttempt"] = ((int)Session["LoginAttempt"]) + 1;
Ответ 4
Почему бы не инкапсулировать значение LoginAttempt в качестве свойства и автоматически назначить значение:
protected int LoginAttempt
{
get
{
if (Session["LoginAttempt"] == null)
{
Session["LoginAttempt"] = 1;
}
return Convert.ToInt32(Session["LoginAttempt"].ToString());
}
set
{
Session["LoginAttempt"] = value;
}
}
так что основная часть функции более читаема:
if (LoginAttempt < 3)
{
}
Ответ 5
Это будет сделано в первый раз, когда вы попытаетесь установить его, если вы еще не инициализировали его ранее. Вместо этого попробуйте:
if (Session["LoginAttempt"] == null)
Session["LoginAttempt"] = 1;
else
((int)Session["LoginAttempt"]) += 1;
Ответ 6
Вы в какой-то момент инициализируете его, прежде чем пытаться извлечь и/или увеличить его?
Ответ 7
Разделите свой нетривиальный код по частям:
int sessionLogicAttempt = (int)Session["LoginAttempt"];
int someValue = sessionLogicAttempt + 1;
Session["LoginAttempt"] = someValue;
Также добавьте утверждения для проверки значений, которые вы принимаете.
Ответ 8
//read
object attemptObj = Session["LoginAttempt"]
int attempt = 0;
if (attemptObj != null) attempt = (int)attemptObj ;
////write
Session["LoginAttempt"] = attempt++;
Ответ 9
попробуйте сделать что-то, что может быть пустым.
int i = Session["val"] == null ? 0 : (int)Session["val"];
хотя это может повредить вам, если какой-либо другой программист использует ваш сеанс "val" и помещает там значение non int.
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
}