【发布时间】:2011-09-05 11:15:14
【问题描述】:
我想创建一个泛型方法,它使用指向 T 数组的指针,其中 T 可以是 C# 原语或 C# 类。在我尝试“T”部分之前,我一直进展顺利。
有没有办法解决“无法声明指向非托管类型 TIn 的指针”的错误
我尝试通过“固定”关键字使用固定来实现这一点。
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。”即使有 biltable 约束,他们似乎也将其限制为一维数组。
【问题讨论】:
-
泛型和
unsafe不能很好地混合。你需要一个不存在的where TIn : blittable约束(Blittable and Non-Blittable Types)。你想达到什么目的? -
不支持指向泛型类型的指针。编译器也会告诉你的。你对此无能为力。只需生成具体类型。
-
n 维数组的转换器逻辑,用于一组大约十几种类型。指针本来是理想的。
-
@dtb:感谢您指出“blittable”。刚刚用这些信息更新了上面的问题。
-
您可以通过使用
void*指针来实现这一点,您只需要记住之后将其转换回具体类型指针...