2011-10-02 60 views
3

我想要做以下的數組:爲什麼我不能用GcHandle.Alloc引腳枚舉

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)聲稱枚舉是blittable,但我不能釘他們的數組。這可能是GcHandle.Alloc中的一個錯誤嗎?我使用.NET 3.5。

+0

枚舉可能是blittable,但這並不意味着數組是。你有沒有比較新的int [10]'? –

回答

3

在我的書中這有點粗暴,但枚舉不是原始的(typeof(Blah).IsPrimitive是false)而不是blittable。它在blittable types的列表中缺失。鏈接的SO問題是錯誤的。問題是,沒有辦法找出本地枚舉的底層整型的大小。我認爲這是一個很重要的問題,因爲肯定有辦法在託管的枚舉類型中指定它。那麼,不能這樣做。

相關問題