我想做以下事情:
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)声称枚举是可复制的,但我无法固定它们的数组。这可能是 GcHandle.Alloc 中的错误吗?我正在使用 .NET 3.5。
最佳答案
这在我的书中有点笨拙,但枚举不是原始的(typeof(Blah).IsPrimitive 是假的)并且不可 blittable。 blittable types 列表中缺少它.链接的 SO 问题是错误的。问题是无法找出 native 枚举的基础整数类型的大小。我认为是用力过猛,因为肯定有一种方法可以在托管枚举类型中指定它。好吧,做不到。
关于c# - 为什么我不能使用 GcHandle.Alloc 固定枚举数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7628769/