C# MSTest中不同数值类型的比较
当使用两种不同的数字类型调用AreEqual(T,T)时,我会在我认为不应该的情况下将相等报告给我。在AreEqual(T,T)的MSTest文档()中,它表示42L不等于42。当我运行下面的代码,以及一个double和一个整数时,它们会被报告为彼此相等。我假设某个地方正在进行一些铸造,但引擎盖下到底发生了什么?为什么文档中说对于不同的数字类型,42L和42不应该返回相等值,却说它们相等C# MSTest中不同数值类型的比较,c#,C#,当使用两种不同的数字类型调用AreEqual(T,T)时,我会在我认为不应该的情况下将相等报告给我。在AreEqual(T,T)的MSTest文档()中,它表示42L不等于42。当我运行下面的代码,以及一个double和一个整数时,它们会被报告为彼此相等。我假设某个地方正在进行一些铸造,但引擎盖下到底发生了什么?为什么文档中说对于不同的数字类型,42L和42不应该返回相等值,却说它们相等 using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
long expected = 42L;
int actual = 42;
Assert.AreEqual(expected, actual);
}
[TestMethod]
public void Test_Divide()
{
int expected = 5;
double actual = 5;
Assert.AreEqual(expected, actual);
}
}
是幕后发生的事情
编译器将最“宽”的类型选择为T,并转换较小的类型。AreEqual()有大量重载,但它们仅用于实际测试。其中“实用”意味着你不必测试语言是否被破坏。所以你会得到一个相等的值(object,object),在值被装箱后,这永远不会是真的。将鼠标悬停在每个
AreEqual
调用上。它正在调用哪个重载的AreEqual
?为什么呢?如何解释呢?更明确地说,42L注释并不反对您调用的重载。