有人可以解释为什么这个测试失败了:
[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
}
答案 0 :(得分:7)
这是因为您要将Object
与String
进行比较。
如果比较两个字符串,则重载==运算符以比较字符串的值。如果比较对象和字符串,则使用比较两个Object
引用的==运算符,它只是比较引用,而不是值。
Equals方法是一个虚方法,所以尽管你在Object
引用上调用它,它仍然会使用String
类中的重写方法,因为对象的实际类型是{{ 1}}。