【问题标题】:Int session variable to increment?整数会话变量增加?
【发布时间】:2012-01-31 04:48:00
【问题描述】:

会话变量可以是int 吗?我想在每次加载页面时增加Session["PagesViewed"]+1;。尝试增加会话变量时出现错误。

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

【问题讨论】:

  • 你遇到了什么错误?
  • 您需要确保您不在网络农场中。如果是这样,请验证您是否已共享会话。另外,有点离题,但谷歌分析会为你做这件事,而且可能更有效。
  • Session["PagesViewed"]++;((object)Session["PagesViewed"])++;基本相同,不合法。

标签: c# session variables session-variables


【解决方案1】:

您需要先测试Session 变量是否存在,然后才能使用并分配给它。

您可以按如下方式进行增量。

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

但是,如果Session["PagesViewed"] 不存在,这将导致错误。增量之前的快速null 测试应该可以解决。

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

【讨论】:

  • 那不会编译。您需要显式添加1Session["PagesViewed"] = (int)Session["PagesViewed"] + 1;
  • 应该使用++ 作为前缀,因为它首先作为后缀进行赋值,所以值不会改变。 Session["PagesViewed"] = ++((int)Session["PagesViewed"]);
【解决方案2】:

是的,可以。但是,++ 仅在编译器知道对象是 int 时才有效。它怎么知道你的代码的其他部分没有偷偷地做Session["PagesViewed"] = "Ha-ha";

你可以通过强制转换有效地告诉编译器你不会做这样的事情:如果会话变量不是真正的 int,你会得到一个运行时异常。

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

【讨论】:

    【解决方案3】:

    Session["PagesViewed"] 只会返回一个对象 - 这就是您的 .ToString() 调用有效的原因。您需要将其转换回一个 int,在那里递增,然后将其放回会话中。

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多