代码之家  ›  专栏  ›  技术社区  ›  Nicolas Dorier

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

  •  0
  • Nicolas Dorier  · 技术社区  · 17 年前

            [TestMethod]
            public void WierdComparison()
            {
                var machineConf = ConfigurationManager.OpenMachineConfiguration();
                var systemWeb = machineConf.GetSectionGroup("system.web") as SystemWebSectionGroup;
                var prov = systemWeb.Membership.Providers.OfType<ProviderSettings>().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
            }
    
    1 回复  |  直到 17 年前
        1
  •  7
  •   Guffa    17 年前

    那是因为你在比较一个 Object String .

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

    Equals方法是一个虚拟方法,因此即使在 引用时,它仍将使用 一串 .

    推荐文章