我想做以下事情:
public enum Blah
{
A,B
}
[Test,Explicit]
public void TestEnumGcHandle()
{
var ea = new Blah[10];
GCHandle.Alloc(ea, GCHandleType.Pinned);
}
但我明白了:
System.ArgumentException : Object contains non-primitive or non-blittable data.
Are .net Enums blittable types? (Marshalling)声称Enums是blittable,但我无法确定它们的数组。这可能是GcHandle.Alloc中的一个错误吗?我正在使用.NET 3.5。
答案 0 :(得分:3)
在我的书中有点笨拙但是枚举不是原始的(typeof(Blah).IsPrimitive是假的)而不是blittable。它在blittable types列表中缺失。关联的SO问题是错误的。问题是,没有办法找出原生枚举的底层整数类型的大小。我认为,这很重要,因为肯定有一种方法可以在托管枚举类型中指定它。好吧,不能这样做。