我实际上在未经检查的上下文中测试了 C# 中的强制转换行为。就像文档说的那样,在未经检查的情况下,演员阵容总是成功的。但有时,在特定情况下,从一种特定类型转换为另一种类型会产生意想不到的结果。
例如,我测试了三个“double to sbyte”转换:
var firstCast = (sbyte) -129.83297462979882752; // Result : 127.
var secondCast = (sbyte) -65324678217.74282742874973267; // Result : 0.
var thirdCast = (sbyte) -65324678216.74282742874973267; // Result : 0.
为了清楚起见,第二个和第三个 double 之间的区别只是1
( secondDouble - firstDouble = 1
)。在这种情况下,强制转换的结果似乎总是0
针对任何“大”双值。
我的问题是:为什么第二次和第三次强制转换会导致0
?我在 C# 文档中搜索了答案,但没有找到任何答案。
我使用 .Net Framework 4.7.2 测试了上述内容。