C# string.IsNullOrEmpty()方法未正确处理会话变量

C# string.IsNullOrEmpty()方法未正确处理会话变量,c#,asp.net,session-variables,vwdexpress,isnullorempty,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)) {

在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,它告诉我会话[“userid”]必须有一个值。但是,如果它有一个值,那么string.IsNullOrEmpty()应该返回false,这意味着不应该执行主体,并且我不应该看到短语“inside loop”

字符串.IsNullOrEmpty()在我的PageError页面中似乎也失败了:

 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;
        }
}
在本例中,即使我为会话[“errmess”]设置了值,它也会报告一条未指定的消息

问题是,我在其他上下文中使用了这个习惯用法,而且它似乎有效——只有当我将它应用到会话变量时,我才有问题。有什么我遗漏的吗

在与会话变量一起使用时,我在函数的早期版本中发现了对bug的引用,但这些引用表明该bug已在当前版本中修复。例如,这里:

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

试试:

string strErrMess = (Session["errmess"] == null)
    ? "Unspecificed error message" 
    : Session["errmess"].ToString();
在测试它是否为null之前,您将它转换为字符串,因此它将抛出错误。

尝试:

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

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

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

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

在检查字符串是否为字符串之前,您没有调用
ToString()。您为它分配了一个
int
值,因此它当然不是字符串。我认为如果该值为null,则可能会使ToString()失败。在检查它是否为字符串之前,您没有调用
ToString()。您为它分配了一个
int
值,因此它当然不是字符串。我认为如果该值为null,它可能会使ToString()失败。在我的例子中,我将其意义颠倒为==null | |==“”,但这是可行的!谢谢当然可以始终确保首先执行null检查,因为如果检查失败(因此不会引发异常),则不会对右侧进行计算。在我的情况下,我将其意义反转为==null | |==”,但这是可行的!谢谢当然可以始终确保首先执行null检查,因为如果检查失败,则不会计算右侧(因此不会引发异常)