我正在编写代码片段的一部分,我需要检查两个字符串是否相等。但在我的情况下,即使两个字符串相等,控件总是会击中else部分。
以下是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
GetLoginData data = new GetLoginData();
LoginDataSet login = new LoginDataSet();
string email = "abc@gmail.com";
string password = "asdfghjkl";
login = data.getLoginData(email, password);
/* login is a LoginDataSet object reference which holds email and password
data retreived from DB.*/
string email1 = login.email.ToString();
string password1 = login.password.ToString();
if (email.Equals(email1) && password.Equals(password1))
{
//Does not execute at all
Label1.Text = "true";
}
else
Label1.Text = "false";
}
我的LoginDataSet类如下:
public class LoginDataSet
{
public virtual String email
{ set; get;}
public virtual String password
{ set; get; }
}
请告诉我这是什么错误。据我所知,String类已经覆盖了Equals方法,因此我们可以直接使用它。 感谢帮助。提前致谢
答案 0 :(得分:1)
与Java不同,在C#中,您不需要对字符串使用equals
方法。你可以这样做:
password == password1
因此,您的if
声明将变为:
if (email == email1 && password == password1)
equals
方法也应该有效。因此,请确保您的字符串实际上是等于的(考虑它们末尾的空格,填充,修剪,套管,编码)。
答案 1 :(得分:0)
你确定它们是一样的吗?如果一个字符是大写字母,它就不会匹配。
如果您想忽略区分大小写的用法:
.Equals("", StringComparison.CurrentCultureIgnoreCase)
您的代码
if (email.Equals(email1, StringComparison.CurrentCultureIgnoreCase) && password.Equals(password1, StringComparison.CurrentCultureIgnoreCase))
{
//Does not execute at all
Label1.Text = "true";
}
else
{
Label1.Text = "false";
}
更新:分隔if语句
if (email.Equals(email1, StringComparison.CurrentCultureIgnoreCase))
{
Label1.Text = "true email";
}
else
{
Label1.Text = "false email";
}
if (password.Equals(password1, StringComparison.CurrentCultureIgnoreCase))
{
Label1.Text = "true password";
}
else
{
Label1.Text = "false password";
}
这是什么结果?
删除前端和后端的空格
string email = Control.Text.Trim();
答案 2 :(得分:0)
Equals
必须有效。请按debugging
检查值。
请尝试以下操作:
if (email == email1 && password == password1)
{
//Does not execute at all
Label1.Text = "true";
}