如何在C#中将SESSION变量转换为整数类型

时间:2011-02-04 10:51:59

标签: c#

我正在使用C#

我正在尝试检查我的登录尝试是否不超过3,我的意思是以下条件

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

在登录失败的情况下,我正在执行如下增量:

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

但它给了我错误“对象引用未设置为对象的实例。”

请建议!

8 个答案:

答案 0 :(得分:19)

抱歉伙计,

我刚从

更改了整数转换代码
((int) Session["LoginAttempt"])

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

现在它对我来说工作正常,请在其中提出任何问题。

谢谢!

答案 1 :(得分:7)

尝试魔法代码:

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

这会将会话变量Session["LoginAttempt"]转换为可空intint null ?? 0 Session["LoginAttempt"]提供值0为null,因此计算成功。

如果{{1}}之前未初始化,则{{1}}可以为空。

答案 2 :(得分:4)

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

这里你正在做一个增量:

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

但是,如果Session["LoginAttempt"]不存在,这将解释您的错误。在增量之前进行快速null测试应该对其进行排序。

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

答案 3 :(得分:3)

为什么不将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)
{
}

答案 4 :(得分:1)

如果您之前没有初始化它,它会在您第一次尝试设置时执行此操作。试试这个:

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

答案 5 :(得分:0)

将您的非平凡代码分成几部分:

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

此外,添加断言以检查您所假设的值。

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

尽量确保不要施放可能为空值的东西。

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

虽然如果其他程序员使用你的“val”会话并将非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
        }