string.IsNullOrEmpty()方法没有正确处理会话变量

时间:2013-10-28 13:52:36

标签: c# asp.net session-variables vwdexpress isnullorempty

在VWD 2010中使用C#,asp.net。

我在site.master中手动分配了一个会话变量(用于测试目的)。我将值设置为:Session [“userid”] =(int)number

在我的网页中,我有以下代码:

        litmsg.Text = "userid = " + Session["userid"].ToString();

        if (string.IsNullOrEmpty(Session["userid"] as string))
        {
            Session["errmsg"] = "No user ID is specified";
            litmsg.Text = litmsg.Text + "   inside loop";
          //  Response.Redirect("/PageError.aspx");
        }
        return;

在执行期间,litmsg.Text中的值是正确的用户ID,它告诉我Session [“userid”]必须有一个值。但是,如果它有一个值,那么string.IsNullOrEmpty()应该返回false,这意味着不应该执行正文,我不应该看到短语“inside loop。”。

我的PageError页面中的string.IsNullOrEmpty()似乎也失败了:

 protected void Page_Load(object sender, EventArgs e)
 {
        if (!Page.IsPostBack)
        {
            string strErrMess = string.IsNullOrEmpty(Session["errmess"] as string) ? 
                   "Unspecificed error message" :
                    Session["errmess"].ToString();

            errmess.Text = strErrMess;
        }
}

在这种情况下,即使我为Session [“errmess”]设置了值,它也会报告一条未指定的消息。

问题是我在其他环境中使用这个习惯用法似乎有效 - 只有当我将它应用于Session变量时我才会遇到问题。有什么我想念的吗

在与会话变量一起使用时,我发现函数的PREVIOUS版本中存在错误,但这些引用表明该错误已在当前版本中修复。例如,这里:C# String.IsNullOrEmpty: good or bad?

我喜欢这个成语,因为我已经在其他地方使用它了。有没有更好的方法呢?一个有效吗?或许我做错了什么。

2 个答案:

答案 0 :(得分:3)

尝试:

string strErrMess = (Session["errmess"] == null)
    ? "Unspecificed error message" 
    : Session["errmess"].ToString();

如果它是null,则在测试之前将其作为字符串进行转换,因此它会抛出错误。

答案 1 :(得分:1)

如果将int强制转换为类型string,则会导致空引用,因为它无法转换为该类型。因此,string.IsNullOrEmpty方法将返回true。