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

时间:2015-10-21 15:57:24

标签: c# .net

我有代码

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)代码以防止此行为?

1 个答案:

答案 0 :(得分:4)

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

这不是第一个,例如,请参阅this blog post,了解Stack Overflow团队如何跟踪另一个问题。

正如评论中所讨论的那样,如果您定位.NET 3.5,则不会触发它,也不会在.NET 4中定位x86。

错误可能已经或可能没有报告给Microsoft - 如果有人知道有关此的错误报告,或者安装了.NET 4.6以更多地追踪根本原因,请随意编辑。