.net 3.5和.net 4.0之间存在奇怪的区别

qmo*_*mor 13 .net c#

我有一个代码

byte[] bytes = new byte[] { 0x80, 1, 192, 33, 0 };

if (bytes[0] != 0x80 || ((bytes[1] & ~1) != 0) || bytes[4] != 0)
{
//signature wrong (.net 4.0 result)
}
else
{
//signture okay (.net 3.5 result)
}
Run Code Online (Sandbox Code Playgroud)

在.net 3.5中,expression的计算结果为false,但在4.0中,它的计算结果为true.我的问题是为什么?以及如何检查所有旧的(.net 3.5)代码以防止此行为?

Jam*_*rpe 4

所以它不会在评论中丢失,我相信您已经遇到了 RyuJIT 中的错误,RyuJIT 是 .NET 4.6 中用于 64 位应用程序的新 JIT 编译器

这不是第一个,例如,请参阅此博客文章,其中显示了 Stack Overflow 团队如何追踪另一个问题。

正如评论中所讨论的,如果您以 .NET 3.5 为目标,或者以 .NET 4 中的 x86 为目标,则不会触发它。

错误可能已报告给 Microsoft,也可能尚未报告给 Microsoft - 如果有人知道此错误报告,或者安装了 .NET 4.6 以进一步追踪根本原因,请随时进行编辑。