指向泛型数组的指针

本文关键字:指针 数组 泛型 | 更新日期: 2023-09-27 18:07:28

我想创建一个泛型方法,它使用指向数组T的指针,其中T可以是c#原语,也可以是c#类。在我尝试"T"部分之前,我做得很好。

是否有办法解决"不能声明指向非托管类型TIn的指针"的错误

我试着通过"fixed"关键字来使用固定来实现这一点。

    public static object DoSomething<TIn, TOut>(object SObj, Action<TIn, TOut> takeAction)
    {
        double[]A = (double[]) SObj;
        TIn[]B = new TIn[5];
        unsafe
        {
            fixed (double* dbl = A) // <--- works okay
            {
            }
            fixed (TIn* Sptr = B)  // <--- fails
            {
            }
        }
    }

,

@dtb:刚刚检查了blittable。位元型的一维数组,如整数数组。然而,包含可变blittable类型数组的类型本身并不是blittable。"即使有biltable约束,他们似乎也将其限制为一维数组。

指向泛型数组的指针

基本上没有。不能创建指向托管类型的指针——只能创建指向某些基本类型和结构体的指针,其中所有字段本身都是结构体或非托管类型。你的泛型形参类型没有这些属性,所以它禁止构造指针,并给你这个错误。

根据http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx,指针可以指向:

  • sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool

  • 任意枚举类型。

  • 任意指针类型

  • 任何用户定义的结构类型,只包含非托管类型的字段。

幸运的是,由于指针算术是不可能的,所以拥有一个指向托管类型的指针并没有很多好处。你为什么想造一个?