我有密码
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) 代码以防止这种行为?
最佳答案
所以它并没有在评论中丢失,我相信你在 RyuJIT 中遇到了一个错误,RyuJIT 是 .NET 4.6 中用于 64 位应用程序的新 JIT 编译器。
这不是第一个,例如见this blog post显示 Stack Overflow 团队如何追踪另一个问题。
如评论中所述,如果您以 .NET 3.5 为目标,则不会触发它,如果您以 .NET 4 中的 x86 为目标,也不会触发。
此 错误可能已报告给 Microsoft,也可能尚未报告给 Microsoft - 如果有人知道此错误报告,或安装了 .NET 4.6 以进一步追踪根本原因,请随时进行编辑。
关于c# - .net 3.5 和 .net 4.0 之间的奇怪区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33263941/