http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4987|回复: 10

[其他] C#字符串比较,为什么比较的结果为false?

[复制链接]
发表于 2013-5-16 14:46:42 | 显示全部楼层 |阅读模式
我比较的代码如下:
[code=csharp]
bool r=this.txbOldPass.Text.Trim().Equals(User.UserPass);
            if (!r)
            {
                //经查看,要比较的两个字符串没什么不同呀,后面有截图
                MessageBox.Show(this.txbOldPass.Text.Trim() + "|"+User.UserPass);

                MessageBox.Show("旧密码错误,请重新输入。");
                this.txbOldPass.Text = "";
                return false;
            }
[/code]

//截图如下
1.jpg

//比较结果为什么是false?实在是想不明白。
2.jpg



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-5-16 14:52:09 | 显示全部楼层
bool r=this.txbOldPass.Text.Trim().Equals(User.UserPass);
你这是比较的对象txbOldPasst和User怎么可能相等呢,
你这代码有点得瑟了,不就是比较个字符串吗?直接==号不就完事了
bool r=this.txbOldPass.Text.Trim()==User.UserPass;
 楼主| 发表于 2013-5-16 14:57:25 | 显示全部楼层
站长苏飞 发表于 2013-5-16 14:52
bool r=this.txbOldPass.Text.Trim().Equals(User.UserPass);
你这是比较的对象txbOldPasst和User怎么可能 ...

   
比较类的属性不行?
   /// <summary>
        /// 用户密码
        /// </summary>
        public static string UserPass{get;set;}

我那是比较对象?有点不清楚了。
 楼主| 发表于 2013-5-16 15:30:32 | 显示全部楼层
站长苏飞 发表于 2013-5-16 14:52
bool r=this.txbOldPass.Text.Trim().Equals(User.UserPass);
你这是比较的对象txbOldPasst和User怎么可能 ...

我代码改成:bool r=this.txbOldPass.Text.Trim()==User.UserPass;

还是一样的错误,真是难以理解。
 楼主| 发表于 2013-5-16 15:52:48 | 显示全部楼层
站长苏飞 发表于 2013-5-16 14:52
bool r=this.txbOldPass.Text.Trim().Equals(User.UserPass);
你这是比较的对象txbOldPasst和User怎么可能 ...

我写了个例子来测试:
[code=csharp]
class A
    {
        public static string pass {get;set;}
    }
    class Program
    {
        static void Main(string[] args)
        {
            string s = "qq";
            A.pass = "qq";
            Console.WriteLine(s.Equals(A.pass));
            Console.WriteLine(s==A.pass);
            Console.Read();
        }
    }
[/code]
//效果截图如下
3.jpg

为什么在窗体中会出错,真是难以理解。
发表于 2013-5-16 16:23:31 | 显示全部楼层
friendan 发表于 2013-5-16 15:52
我写了个例子来测试:

//效果截图如下

你调试看看值是不是一样,或者直接都Tostring一下
 楼主| 发表于 2013-5-16 16:36:36 | 显示全部楼层
站长苏飞 发表于 2013-5-16 16:23
你调试看看值是不是一样,或者直接都Tostring一下


问题找出来了,经过调试,原来从数据库中取出密码时,
后面包含有很多的空字符,就是看不见的字符了。

解决方法:
比较时去掉那些空字符就可以了,

bool r = this.txbOldPass.Text.Trim().Equals(User.UserPass);  //原来的代码

bool r = this.txbOldPass.Text.Trim().Equals(User.UserPass.Trim());  //修改后的代码
发表于 2013-5-16 16:57:45 | 显示全部楼层
friendan 发表于 2013-5-16 16:36
问题找出来了,经过调试,原来从数据库中取出密码时,
后面包含有很多的空字符,就是看不见的字符了。 ...

字符串的建议使用==号,一般都要加上trim()方法,
呵呵,习惯了就好了,
把问题修改为已解决吧

发表于 2013-5-23 10:09:41 | 显示全部楼层
加油,我们都看好你哦。
发表于 2013-8-2 10:30:50 | 显示全部楼层
受教了,学习中……
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-2 14:18

© 2014-2021

快速回复 返回顶部 返回列表