指向泛型数组的指针
本文关键字:指针 数组 泛型 | 更新日期: 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
任意枚举类型。
任意指针类型
任何用户定义的结构类型,只包含非托管类型的字段。
幸运的是,由于指针算术是不可能的,所以拥有一个指向托管类型的指针并没有很多好处。你为什么想造一个?