Переменная сессии Int для увеличения? - PullRequest
4 голосов
/ 01 января 2012

Может ли переменная сеанса быть int? Я хочу увеличивать Session["PagesViewed"]+1; каждый раз при загрузке страницы. Я получаю ошибки при попытке увеличить переменную сеанса.

if (Session["PagesViewed"].ToString() == "2")
{
     Session["PagesViewed"] = 0;
}
else
{
     Session["PagesViewed"]++;
}

Ответы [ 3 ]

8 голосов
/ 01 января 2012

Вам нужно проверить, существует ли переменная Session, прежде чем вы сможете использовать ее и присвоить ей.

Вы можете сделать приращение следующим образом.

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

Но, если Session["PagesViewed"] не существует, это приведет к ошибкам. Быстрый null тест до приращения должен разобрать его.

if (Session["PagesViewed"] != null)
    Session["PagesViewed"] = ((int)Session["PagesViewed"]) + 1;
2 голосов
/ 01 января 2012

Да, это может быть.Однако ++ работает только тогда, когда компилятор знает , что объект является целым числом.Откуда он знает, что какая-то другая часть вашего кода не может незаметно выполнить Session["PagesViewed"] = "Ha-ha";?

Вы можете эффективно сказать компилятору, что вы не будете делать что-то подобное путем приведения: вы получите время выполненияисключение, если переменная сеанса на самом деле не является int.

int pagesViewed = (int)Session["PagesViewed"];
if (pagesViewed == 2)
{
    pagesViewed = 0;
}
else
{
    pagesViewed++;
}
Session["PagesViewed"] = pagesViewed;
2 голосов
/ 01 января 2012

Session["PagesViewed"] вернет только Объект - вот почему ваш .ToString() вызов работает.Вам нужно будет привести его обратно к int, увеличить его там, а затем вернуть обратно в сеанс.

...