指向通用类型数组的指针?

时间:2011-09-05 11:15:15

标签: c# arrays

我想创建一个泛型方法,该方法使用指向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类型的可变数组的类型本身并不是blittable。”即使存在可以约束的约束,看起来它们也只限于一维数组。

1 个答案:

答案 0 :(得分:6)

基本上,没有。您无法创建指向托管类型的指针 - 仅限于某些基本类型和结构,其中所有字段本身都是结构或非托管类型。您的通用参数类型将不具有这些属性,因此它禁止构造指针并为您提供该错误。

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

  
      
  • sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,decimal或bool。

  •   
  • 任何枚举类型。

  •   
  • 任何指针类型。

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

  •   

幸运的是,由于指针算法是不可能的,因此指向托管类型的指针并没有多大好处。你为什么要建一个?