如何获得列表指针?

时间:2015-10-20 14:12:44

标签: c# unmanaged

所以我知道列表中包含数组,所以我需要得到一个未知类型的指针(void *)。使用数组很容易:

int[] items;
fixed (void* pointer = items)
{

}

所以我需要为List

做同样的事情
List<int> items;
fixed (void* pointer = items)
{

}

此代码似乎不起作用。我不想将列表复制到新数组,我想访问指向它的内部数组的指针

2 个答案:

答案 0 :(得分:2)

有可能。

  1. 您可以通过反射访问私有数组List<T>._items

  2. 自己实施一个!

    利用开源的.NET Core项目,它是免费的:source code of List<T>。然后添加方法或某些东西以获得List<T>._items的不安全指针非常容易。

答案 1 :(得分:1)

无法获得指向List<T>的指针 - 您只能获得指向基本类型数组的指针。 (在这种情况下,通过获取其地址,您将获得指向第一个元素的指针。)

根据列表的大小,您可以在列表中调用ToArray(),然后获取指向第一个元素的指针,但这对于大型数组来说可能相当昂贵。