Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:使用泛型创建指针数组_C#_Generics_Pointers - Fatal编程技术网

C#:使用泛型创建指针数组

C#:使用泛型创建指针数组,c#,generics,pointers,C#,Generics,Pointers,下午好, 如果你愿意的话,给我一点帮助。为了规避.NET中2Gb对象的限制,我创建了一个类,在堆上分配内存,这允许我创建数组,直到我的可用RAM限制为止。然而,为了便于开发(因为它是概念的证明),它被硬编码为long。现在它工作了,我一直在尝试修改代码以使用泛型,这样我就可以对多种类型使用相同的代码 在分配内存和正确索引数组时,我需要一个与数组将容纳的指针类型相同的数组,即长数组需要long*[]myLargeArray。问题是,当我使用泛型时,此声明变为T*[]myLargeArray,它总是

下午好,

如果你愿意的话,给我一点帮助。为了规避.NET中2Gb对象的限制,我创建了一个类,在堆上分配内存,这允许我创建数组,直到我的可用RAM限制为止。然而,为了便于开发(因为它是概念的证明),它被硬编码为long。现在它工作了,我一直在尝试修改代码以使用泛型,这样我就可以对多种类型使用相同的代码

在分配内存和正确索引数组时,我需要一个与数组将容纳的指针类型相同的数组,即长数组需要
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<代码>的工厂类。

我认为工厂模式绝对是到这里的途径。