有人可以解释为什么这个测试失败了:
[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
.
那是因为你正在比较a Object
和a String
.
如果比较两个字符串,则重载==运算符以比较字符串的值.如果比较对象和字符串,Object
则使用比较两个引用的==运算符,它只是比较引用而不是值.
Equals方法是一个虚方法,所以尽管你在Object
引用上调用它,它仍然会使用类中的重写方法String
作为对象的实际类型String
.