我也碰到过这种奇怪的行为:当我的项目设置设为Any CPU
并Prefer 32-bit
在64bit Windows 7 OS
在.Net 4.5
下面的工程计划符合市场预期.然而,如果我关闭Prefer 32-bit
然后在单步执行程序时,我可以看到代码从不进入接口实现 - 但也不会抛出任何错误.
我在以下控制台应用程序中将其简化为最简单的形式:
namespace BugCheck { interface IBroken { bool Broken(TValue gen, Large large); } class Broke : IBroken { public bool Broken (TValue gen, Large large ) { return true; } } struct Large { int a, b, c; } class Program { static void Main (string[] args) { //32bit can step in. 64bit can't ((IBroken)new Broke()).Broken(1, new Large()); } } }
正如预期的那样,当切换Prefer 32-bit
程序时,将在.net 32位程序集和64位程序集之间交替 - 它在32位程序集中按预期工作,并在64位程序集中"静默地".
正如@Athari所建议的那样,它似乎与Large结构的大小有关.
我做错了导致这种行为的原因是什么?