C# string.IsNullOrEmpty()方法未正确处理会话变量
在VWD 2010中使用C#,asp.net 我在site.master中手动分配了一个会话变量(用于测试目的)。我将该值设置为:Session[“userid”]=(int)number 在我的网页中,我有以下代码: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)) {
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
转换为typestring
,它将导致空引用,因为它无法转换为该类型。因此,string.IsNullOrEmpty
方法将返回true。如果将int
强制转换为typestring
,将导致空引用,因为无法将其强制转换为该类型。因此,string.IsNullOrEmpty
方法将返回true。在检查字符串是否为字符串之前,您没有调用ToString()。您为它分配了一个int
值,因此它当然不是字符串。我认为如果该值为null,则可能会使ToString()失败。在检查它是否为字符串之前,您没有调用ToString()。您为它分配了一个int
值,因此它当然不是字符串。我认为如果该值为null,它可能会使ToString()失败。在我的例子中,我将其意义颠倒为==null | |==“”,但这是可行的!谢谢当然可以始终确保首先执行null检查,因为如果检查失败(因此不会引发异常),则不会对右侧进行计算。在我的情况下,我将其意义反转为==null | |==”,但这是可行的!谢谢当然可以始终确保首先执行null检查,因为如果检查失败,则不会计算右侧(因此不会引发异常)