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

本文关键字:net 区别 之间 | 更新日期: 2023-09-27 18:18:38

我有一个代码

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)
}

在。net 3.5中表达式的值为false,但在4.0中它的值为true。我的问题是为什么?我如何检查所有旧的(.net 3.5)代码来防止这种行为?

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

所以它没有在评论中丢失,我相信你在RyuJIT中遇到了一个错误,RyuJIT是。net 4.6中针对64位应用程序的新JIT编译器

这不是第一个,例如,看看这篇博客文章,展示了Stack Overflow团队如何追踪另一个问题。

正如在评论中讨论的那样,如果您的目标是。net 3.5,也不会触发它,如果您的目标是。net 4中的x86。

这个错误可能还没有报告给微软,如果有人知道这个错误报告,或者安装了。net 4.6来追踪更多的潜在原因,请随时编辑。