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.";
                }
            }
        }
    }
}

C# 隐式转换问题

问题是您正在执行作业,而不是在下面的代码中

进行比较
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 循环。它下面的代码将不会执行。因此,该代码无法访问。