【问题标题】:string.IsNullOrEmpty() method not handling session variables properlystring.IsNullOrEmpty() 方法未正确处理会话变量
【发布时间】:2013-10-28 13:52:35
【问题描述】:

在 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 变量时我才有问题。有什么我想念的吗

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

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

【问题讨论】:

  • 在检查它是否为字符串之前,您没有调用ToString()。您为它分配了一个 int 值,所以它当然不是字符串。
  • 我认为如果值为 null,它可能会导致 ToString() 失败。

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


【解决方案1】:

尝试:

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

在测试它是否为空之前,您将其转换为字符串,因此它会抛出错误。

【讨论】:

  • 在我的例子中,我将意义反转为 ==null || == "",但这行得通!谢谢!
  • 确定。始终确保首先执行 null 检查,因为如果失败则不会评估右侧(因此不会引发异常)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多