我在比较ASP.NET项目中的两个对象时遇到了问题,我不确定我是初学者还是什么,但这是我的实际代码:
private void CheckFriendshipStatus()
{
if (Object.ReferenceEquals(Session["UserId"].ToString(), Session["CurrentProfileId"].ToString()))
{
btnAddAsFriend.Visible = false;
}
else
{
DataTable dt1 = new DataTable();
string chkfriendRequest = "SELECT * FROM Friends WHERE (MyId='" + Session["UserId"].ToString() + "' and FriendId='" + Session["CurrentProfileId"].ToString() + "') OR (MyId='" + Session["CurrentProfileId"].ToString() + "' and FriendId='" + Session["UserId"].ToString() + "')";
然后我尝试了:
var obj1 = Session["UserId"].ToString();
var obj2 = Session["CurrentProfileId"].ToString();
if (obj1 == obj2)
{
btnAddAsFriend.Visible = false;
}
else
{
然后我尝试先将值设置为null,然后分配会话值。我没有想法,任何其他人都会受到高度赞赏
答案 0 :(得分:1)
如果将字符串放入Session,则可以通过强制转换将它们作为字符串取回。
var obj1 = (string)Session["UserId"]
如果obj1
恰好为null,则调用obj1.ToString()
将导致空引用异常。如上所示进行转换将避免该异常(尽管如果其中一个为null,则可能仍然是逻辑错误,具体取决于程序中的约定。)
如果它们是字符串,则您希望使用==
运算符。如果两个变量引用完全相同的对象,则Object.ReferenceEquals()
返回true。由于字符串实习,无论如何,这将“巧合”通常会给你预期的结果,但是可以关闭字符串实习。
更新:
根据您的澄清评论,几乎可以肯定您调用Session
的{{1}}个变量中的一个或两个都为空。使用我概述的强制转换方法,并使用调试器查看哪个为null。
答案 1 :(得分:0)
Session["UserId"]
或Session["CurrentProfileId"]
或btnAddAsFriend
为空。无法从提供的细节中分辨出来。
答案 2 :(得分:0)
这实际上是有用的人,
var obj1 = Session["UserId"].ToString();
var obj2 = Session["CurrentProfileId"].ToString();
if (obj1 == obj2)
{
btnAddAsFriend.Visible = false;
}
如果某些人可能会遇到与步骤1相同的代码,那么这将解决它!
感谢所有花时间浪费我并帮助我的人! :)