Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MSTest中不同数值类型的比较_C# - Fatal编程技术网

C# MSTest中不同数值类型的比较

C# MSTest中不同数值类型的比较,c#,C#,当使用两种不同的数字类型调用AreEqual(T,T)时,我会在我认为不应该的情况下将相等报告给我。在AreEqual(T,T)的MSTest文档()中,它表示42L不等于42。当我运行下面的代码,以及一个double和一个整数时,它们会被报告为彼此相等。我假设某个地方正在进行一些铸造,但引擎盖下到底发生了什么?为什么文档中说对于不同的数字类型,42L和42不应该返回相等值,却说它们相等 using Microsoft.VisualStudio.TestTools.UnitTesting;

当使用两种不同的数字类型调用AreEqual(T,T)时,我会在我认为不应该的情况下将相等报告给我。在AreEqual(T,T)的MSTest文档()中,它表示42L不等于42。当我运行下面的代码,以及一个double和一个整数时,它们会被报告为彼此相等。我假设某个地方正在进行一些铸造,但引擎盖下到底发生了什么?为什么文档中说对于不同的数字类型,42L和42不应该返回相等值,却说它们相等

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注释并不反对您调用的重载。