c# - 比较 MSTest 中的不同数值类型
问题描述
当使用两种不同的数字类型调用 AreEqual(T, T) 时,当我认为我不应该时,我会收到相等的报告。在 AreEqual(T, T) 的 MSTest 文档(https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.testtools.unittesting.assert?view=mstest-net-1.2.0)中,它说 42L 不等于 42。当我运行下面的代码以及使用双精度和整数时,它们被报告为彼此相等。我假设正在某处进行一些铸造,但实际上发生了什么?当文档说它们不应该为不同的数字类型返回相等时,为什么说 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 并转换较小的类型。
推荐阅读
- java - 如何从输入框中获取字符串?
- c - 减号运算符用作一元按位运算
- ios - 如何在多个 collectionView 部分中使用单个数组?
- dockerfile - 新容器从引用的图像中获取数据.. 那为什么需要卷?
- node.js - nodejs声明具有动态大小的对象数组
- jquery - 动态创建具有不同日期时间序列的多系列谷歌折线图
- git - 如何在 git log 中找到 gitlab 中指示的提交?
- cocoa - NSTableViewRowAction - 点击后向后滑动
- c# - 拆分字符串错误:无法从字符串转换为字符
- java - 如何从 firebase 存储中获取 imageUrl 以存储在 firebase 实时数据库中?