我有代码
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)代码以防止此行为?
答案 0 :(得分:4)
所以它没有在评论中丢失,我相信你已经遇到了RyuJIT中的一个错误,这是用于.NET 4.6中64位应用程序的新JIT编译器。
这不是第一个,例如,请参阅this blog post,了解Stack Overflow团队如何跟踪另一个问题。
正如评论中所讨论的那样,如果您定位.NET 3.5,则不会触发它,也不会在.NET 4中定位x86。
此错误可能已经或可能没有报告给Microsoft - 如果有人知道有关此的错误报告,或者安装了.NET 4.6以更多地追踪根本原因,请随意编辑。