Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET3.5和.NET4.0之间的奇怪区别_C#_.net - Fatal编程技术网

C# .NET3.5和.NET4.0之间的奇怪区别

C# .NET3.5和.NET4.0之间的奇怪区别,c#,.net,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) } 在.NET3.5中,表达式的计算结果为false,但在4.0中,它的计算结果为t

我有密码

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

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

因此它不会在注释中丢失,我相信您在RyuJIT中遇到了一个错误,RyuJIT是.net 4.6中用于64位应用程序的新JIT编译器

这不是第一个问题,例如,请参见展示堆栈溢出团队如何跟踪另一个问题

正如在评论中所讨论的,如果以.NET 3.5为目标,或者以.NET 4中的x86为目标,则不会触发该命令


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

您可以拆分条件以确定导致差异的原因吗?最奇怪的是-然后我将在“监视窗口”中开发此表达式(对于.NET3.5和4.0)我得到了:字节[0]!=0x80假布尔((字节[1]&~1)!=0)假布尔字节[4]!=0假布尔(字节[0]!=0x80 | |((字节[1]&~1)!=0)| |字节[4]!=0)false boolI只是把它放在一个控制台应用程序中,针对的是3.5和4。两者最终都会出现在
else
@qm中,或者这可能很重要-这意味着你可能已经有了.net 4.6,因此正在使用新的抖动。尝试针对x86而不是x64/任何cpu-这将强制旧的抖动。新的抖动远远没有bug。还没有更新吗此处分级,因此无法确认。查看堆栈溢出团队在何处找到了一个。底部显示了一个注册表项,您可以设置为禁用新抖动的使用-如果您有依赖于此的生产代码,我建议您现在可能去禁用它。制作此CW,因为它可能是一个重要问题,因此任何人都可以随时更新我的如果他们有更多的信息。目前无法进一步挖掘,看看这有多大关系,但是Nick Craver(堆栈溢出的作者-见上面的博客链接)认为ryujit上至少存在一些问题。