C#:使用泛型创建指针数组
下午好, 如果你愿意的话,给我一点帮助。为了规避.NET中2Gb对象的限制,我创建了一个类,在堆上分配内存,这允许我创建数组,直到我的可用RAM限制为止。然而,为了便于开发(因为它是概念的证明),它被硬编码为long。现在它工作了,我一直在尝试修改代码以使用泛型,这样我就可以对多种类型使用相同的代码 在分配内存和正确索引数组时,我需要一个与数组将容纳的指针类型相同的数组,即长数组需要C#:使用泛型创建指针数组,c#,generics,pointers,C#,Generics,Pointers,下午好, 如果你愿意的话,给我一点帮助。为了规避.NET中2Gb对象的限制,我创建了一个类,在堆上分配内存,这允许我创建数组,直到我的可用RAM限制为止。然而,为了便于开发(因为它是概念的证明),它被硬编码为long。现在它工作了,我一直在尝试修改代码以使用泛型,这样我就可以对多种类型使用相同的代码 在分配内存和正确索引数组时,我需要一个与数组将容纳的指针类型相同的数组,即长数组需要long*[]myLargeArray。问题是,当我使用泛型时,此声明变为T*[]myLargeArray,它总是
long*[]myLargeArray
。问题是,当我使用泛型时,此声明变为T*[]myLargeArray
,它总是产生错误“无法获取托管类型(“T”)的地址、大小或声明指向托管类型(“T”)的指针”
提前谢谢
PS在有人问之前,是的,我真的需要这么大的阵列
二维阵列的代码示例:
LargeArray <int> myArray = new LargeArray<int>(x, y);
public unsafe class LargeArray where T : struct
{
...
private T*[] tArr;
...
public LargeArray(long sizeI, long sizeJ)
{
...
myLargeArray = new T*[sizeI];
...
}
}
LargeArray myArray=新的LargeArray(x,y);
公共不安全类LargeArray,其中T:struct
{
...
私人T*[]塔尔;
...
公共大酒店(长西子,长西子)
{
...
myLargeArray=新T*[sizeI];
...
}
}
来自MSDN
即使与不安全的
关键字,获取
托管对象,获取
托管对象,或声明指针
不允许对托管类型进行复制。对于
有关详细信息,请参阅
我也不知道您是否是,但请确保您在代码中使用了。根据:
以下任何一种类型都可能是
指针类型:
- sbyte、byte、short、ushort、int、uint、long、ulong、char、float、, 双精度、十进制或布尔
- 任何枚举类型
- 任何指针类型
- 包含非托管类型字段的任何用户定义的结构类型 只是
struct
约束时,编译器没有足够的信息来推断将满足上述所有要求(特别是最后一点)
因为我们在C语言中没有模板,您可能需要考虑为有意义的数值类型创建数组/指针适配器的重载,或者创建一个给定类型的大小的<代码> GraveRea<代码>的工厂类。
我认为工厂模式绝对是到这里的途径。