2009-10-27 81 views
11

下午所有,C#:使用泛型創建指針數組

如果你願意,請稍微幫助一下。爲了規避.NET中的2Gb對象限制,我做了一個在堆上分配內存的類,這允許我創建數組,使其達到我的可用RAM的限制。然而,爲了便於開發(因爲它是一個概念證明),它被長時間硬編碼。現在,它的工作原理,我一直在試圖改變代碼來使用泛型,所以我可以使用相同的代碼爲多種類型。

在分配內存並正確地索引數組時,我需要一個與數組相同類型的指針數組,即一個長數組需要long*[] myLargeArray。問題是,當我使用泛型這個聲明成爲T*[] myLargeArray,它總是產生錯誤「不能走的地址,獲取的大小,或指針聲明到託管型(」 T「)」

提前致謝。

PS在任何人問起之前,是的,我確實需要這麼大的數組。

碼例如用於2D陣列:

​​

回答

0

從MSDN與不安全 關鍵字使用即使當,服用 管理對象的地址,得到一個 的大小

管理對象,或者將指針 指定爲託管類型是不允許的。對於 更多信息,請參閱Unsafe Code and Pointers (C# Programming Guide).

此外,我不知道,如果你是,但要確保你在代碼中使用fixed keyword

11

按照C# programming guide

以下任何類型的可以是 指針類型:

  • 爲sbyte,字節,短,USHORT,INT,UINT,長,ULONG,炭,float, double,decimal或bool
  • 任何枚舉類型。
  • 任何指針類型。
  • 任何用戶定義的結構類型,僅包含非託管類型字段 。

當你把你的泛型類型的struct約束,編譯器沒有足夠的信息來推斷,所有的上述要求將得到滿足(特別是最後一點)。

由於我們在C#中沒有模板,因此您可能需要考慮爲數組類型指定適當的數組或指針適配器的重載,或者爲工廠類創建一個給定大小的特定類型的LargeArray

+0

我認爲工廠模式絕對是這裏走的路。 – 2009-12-10 10:54:33