我遇到了这种奇怪的行为:当我的项目设置设置为Any CPU
并Prefer 32-bit
在下面64bit Windows 7 OS
的.Net 4.5
程序上按预期工作时。但是,如果我在单步执行程序时关闭Prefer 32-bit
,我可以看到代码永远不会进入接口实现 - 但也不会引发任何错误。
我在以下控制台应用程序中将其提炼为最简单的形式:
namespace BugCheck
{
interface IBroken
{
bool Broken<TValue> (TValue gen, Large large);
}
class Broke : IBroken
{
public bool Broken<TValue> (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 所建议的,它似乎与大型结构的大小有关。
我做错了什么导致这种行为?