2015-10-20 23 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是非常容易的。