2015-10-20 64 views
0

所以我知道该列表包含数组里面,所以我需要得到它的未知类型的指针(void *)。这是很容易与数组做:如何获取列表的指针?

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

} 

所以我需要做同样的事情列表

List<int> items; 
fixed (void* pointer = items) 
{ 

} 

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

+0

不要问我,为什么我需要使用非托管代码。我只需要 – Eugen1344

+0

你可以得到一个指向它的第一个项目的指针,因为这基本上就是你在用数组做什么。 –

+0

@RonBeyer但我可以做到这一点,只有当我的列表包含值类型,对不对? – Eugen1344

回答

1

不可能得到一个指向List<T>的指针 - 你只能得到指向原始类型数组的指针。 (在这种情况下,通过获取其地址,可以获得指向第一个元素的指针。)

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

+0

好的,所以也许有办法从列表中获取数组而不复制它? – Eugen1344

+0

@ Eugen1344不是我所知道的。 C++/CLI _may_有办法做到这一点,但我不确定。 – xxbbcc

0

这是可能的。

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

  2. 自己实施一个!

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