C# 隐式转换问题
本文关键字:问题 转换 | 更新日期: 2023-09-27 18:30:57
好的,我让整个事情都在工作,直到休息后进入部分;此时,If 表示检测到无法访问的代码,if(Session["UserType"] = 1) 给出错误,表示无法将类型对象隐式转换为 bool 类型。关于如何解决此问题的任何建议?以下是整个代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void // ERROR: Handles clauses are not supported in C#
btnSubmit_Click(object sender, System.EventArgs e)
{
if (((string.IsNullOrEmpty(txtUserName.Text))))
{
lblErrorMessage.Text = "Username must be entered.";
txtUserName.Focus();
return;
}
string connString = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;
System.Data.SqlClient.SqlConnection myConnection = new System.Data.SqlClient.SqlConnection(connString);
string sql = "Select * From TCustomers";
System.Data.SqlClient.SqlDataReader objDR = default(System.Data.SqlClient.SqlDataReader);
System.Data.SqlClient.SqlCommand objCmd = new System.Data.SqlClient.SqlCommand(sql, myConnection);
myConnection.Open();
objDR = objCmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
bool blnLogin = false;
string strPassword = null;
string strUserName = null;
strPassword = txtPassword.Text;
strPassword = strPassword.Trim();
strUserName = txtUserName.Text;
strUserName = strUserName.Trim();
while (objDR.Read())
{
if (((objDR["strUserName"].ToString().Trim() == strUserName)) & ((objDR["strPassword"].ToString().Trim() == strPassword)))
{
blnLogin = true;
Session["CustomerID"] = objDR["intCustomerID"];
Session["UserName"] = objDR["strUserName"];
Session["FirstName"] = objDR["strFirstName"];
Session["LastName"] = objDR["strLastName"];
Session["Email"] = objDR["strEmailAddress"];
Session["UserType"] = objDR["intUserTypeID"];
break;
if ((blnLogin))
{
if(Session["UserType"] = 1)
{
Response.Redirect("EditAccount.aspx");
}
{
Session["UserType"] = 2;
Response.Redirect("AdminPanel.aspx");
}
Response.End();
}
else
{
lblErrorMessage.Text = "Username and/or password is incorrect.";
}
}
}
}
}
问题是您正在执行作业,而不是在下面的代码中
进行比较if(Session["UserType"] = 1)
{
Response.Redirect("EditAccount.aspx");
}
使用==
而不是=
进行比较。
赋值的结果是 int
,并且int
不能在 C# 中隐式转换为bool
。这是报告的错误。
如果将=
更改为==
,则会收到另一个错误,因为无法将Session["UserType"]
的值与int
进行比较。为此,您需要将其转换为这样的int
if((int)Session["UserType"] == 1)
{
Response.Redirect("EditAccount.aspx");
}
但请记住,这假设该值可以转换为 int
。如果不是这种情况,您将收到运行时错误。
代码中可能仍然存在其他错误,但您包含的代码比我的心理编译器可以处理的要多。
if(Session["UserType"] = 1)
。是作业,不是比较;您可能想要更接近以下内容的内容:
if((int)Session["UserType"] == 1)
你的 if 语句可能应该是一个比较而不是赋值使用
if(Session["UserType"] == 1)
由于中断,无法访问您的代码。
break 语句将退出 while 循环。它下面的代码将不会执行。因此,该代码无法访问。