2009-10-27 35 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