私はstructlayoutsをいじっていて、かなり奇妙なものを見つけました:
次のコードは、思ったとおりに機能しています。
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 をスローします。
誰かが理由や回避策を説明できますか? これはおそらく複雑すぎて、ここをいじっているだけだと思いますが、誰かが挑戦したいかもしれません.