转换为通用指针

时间:2018-08-15 14:05:29

标签: c# .net pointers reflection

我想知道是否可以用C#创建通用指针。该问题与Pointers of generic type?十分相似,但是我看不到有任何方法可以使任何解决方案在我的情况下起作用。尽管Why is pointer to generic types not allowed?尽管不能解释为什么将泛型类型限制为值类型还不够,但也无济于事,因为这里不需要为每种可能的类型创建重载。

因此,问题的设置基本上是存在一些通用函数,需要将void*强制转换为特定类型的指针,示例函数如下:

public static unsafe T[] fooBar<T>(void* ptr, int length) where T : struct
{
    T* typedPointer = (T*) ptr; // This does not appear to be possible in this form
    T[] retVal = new T[length];

    for (int i = 0; i < length; i++) {
        T[i] = *typedPointer;
        ++typedPointer;
    }

    return retVal;
}

此处必须使用指针的原因是由于调用了一些非托管代码以及C风格的导出,该代码返回了System.Reflection.Pointer,然后通过{{变成了void*} 1}}。

如上所述,是否有任何方法可以将Pointer.Unbox()强制转换为void*,还是无法使用泛型类型指针?

0 个答案:

没有答案