当前位置:  开发笔记 > 数据库 > 正文

.NET中的字符串比较奇怪的行为!

如何解决《.NET中的字符串比较奇怪的行为!》经验,为你挑选了1个好方法。

有人可以解释为什么这个测试失败了:

        [TestMethod]
        public void WierdComparison()
        {
            var machineConf = ConfigurationManager.OpenMachineConfiguration();
            var systemWeb = machineConf.GetSectionGroup("system.web") as SystemWebSectionGroup;
            var prov = systemWeb.Membership.Providers.OfType().Where((s) => s.Name == "AspNetSqlMembershipProvider").First();

            bool result, expected;
            var connectionStringName = prov.ElementInformation.Properties["connectionStringName"].Value;


            result = connectionStringName.Equals("LocalSqlServer");
            expected = true;

            Assert.AreEqual(expected, result);

            result = connectionStringName == "LocalSqlServer";
            expected = true;

            Assert.AreEqual(expected, result); //This assertion fails
        }

Guffa.. 7

那是因为你正在比较a Object和a String.

如果比较两个字符串,则重载==运算符以比较字符串的值.如果比较对象和字符串,Object则使用比较两个引用的==运算符,它只是比较引用而不是值.

Equals方法是一个虚方法,所以尽管你在Object引用上调用它,它仍然会使用类中的重写方法String作为对象的实际类型String.



1> Guffa..:

那是因为你正在比较a Object和a String.

如果比较两个字符串,则重载==运算符以比较字符串的值.如果比较对象和字符串,Object则使用比较两个引用的==运算符,它只是比较引用而不是值.

Equals方法是一个虚方法,所以尽管你在Object引用上调用它,它仍然会使用类中的重写方法String作为对象的实际类型String.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有