GCHandle.Alloc拒绝锁定包含“decimal”数据类型的结构体数组,但同时可以正常使用“double”。这是什么原因,我是否能够以某种方式解决它?
我知道我可以使用unsafe/fixed来获取指向数组的指针,但这无法与泛型一起使用。 :-(
完整的示例代码可演示该问题。第一个Alloc有效,但第二个会失败并显示“Object contains non-primitive or non-blittable data.”。
现在试试这个:
我知道我可以使用unsafe/fixed来获取指向数组的指针,但这无法与泛型一起使用。 :-(
完整的示例代码可演示该问题。第一个Alloc有效,但第二个会失败并显示“Object contains non-primitive or non-blittable data.”。
public struct X1
{
public double X;
}
public struct X2
{
public decimal X;
}
现在试试这个:
var x1 = new[] {new X1 {X = 42}};
var handle1 = GCHandle.Alloc(x1, GCHandleType.Pinned); // Works
var x2 = new[] { new X2 { X = 42 } };
var handle2 = GCHandle.Alloc(x2, GCHandleType.Pinned); // Fails
decimal
和double
非常不同。Double
是一种本地类型,而decimal
是一个 128 位的结构。 - Panagiotis KanavosGCHandle.Alloc
拒绝固定甚至DateTime[]
或int?[]
,仅供参考... - xanatos