我把结构布局弄乱了,我发现了一些我觉得很奇怪的东西:
以下代码按我的想法工作:
using System;
using System.Runtime.InteropServices;
public class Program
{
[STAThread]
static void Main()
{
Magic m = new Magic
{
InstanceA = new ClassA(),
InstanceB = new ClassB {Value="47"}
};
Console.WriteLine(m.InstanceA.Value);
Console.ReadKey();
}
class ClassA
{
public dynamic Value;
}
class ClassB
{
public string Value; // Change to int and it will get messy
}
[StructLayout(LayoutKind.Explicit)]
struct Magic
{
[FieldOffset(0)]
public ClassA InstanceA;
[FieldOffset(0)]
public ClassB InstanceB;
}
}
但是,如果将 classB.Value 更改为 int,则此代码将抛出上述 FatalExecutionEngineError。
谁能解释为什么或者如何解决?我知道这可能太复杂了,我只是在这里捣乱,但有人可能想要一些挑战。