如何获取列表的指针?
How to get a pointer of list?
所以我知道列表中包含数组,所以我需要获取它的未知类型的指针 (void*)。使用数组很容易:
int[] items;
fixed (void* pointer = items)
{
}
所以我需要为列表做同样的事情
List<int> items;
fixed (void* pointer = items)
{
}
此代码似乎不起作用。我不想将列表复制到新数组,我想访问指向它的内部数组的指针
无法获得指向 List<T>
的指针 - 您只能获得指向基本类型数组的指针。 (在这种情况下,您可以通过获取第一个元素的地址来获得指向第一个元素的指针。)
根据您的列表有多大,您可以在列表上调用 ToArray()
然后获取指向第一个元素的指针,但这对于大型数组来说可能相当昂贵。
这是可能的。
可以通过反射访问List<T>._items
的私有数组
自己实现一个!
利用开源 .NET Core 项目,它是免费的:source code of List<T>
。然后添加方法或其他东西以获得List<T>._items
的不安全指针非常容易。
所以我知道列表中包含数组,所以我需要获取它的未知类型的指针 (void*)。使用数组很容易:
int[] items;
fixed (void* pointer = items)
{
}
所以我需要为列表做同样的事情
List<int> items;
fixed (void* pointer = items)
{
}
此代码似乎不起作用。我不想将列表复制到新数组,我想访问指向它的内部数组的指针
无法获得指向 List<T>
的指针 - 您只能获得指向基本类型数组的指针。 (在这种情况下,您可以通过获取第一个元素的地址来获得指向第一个元素的指针。)
根据您的列表有多大,您可以在列表上调用 ToArray()
然后获取指向第一个元素的指针,但这对于大型数组来说可能相当昂贵。
这是可能的。
可以通过反射访问
List<T>._items
的私有数组自己实现一个!
利用开源 .NET Core 项目,它是免费的:source code of
List<T>
。然后添加方法或其他东西以获得List<T>._items
的不安全指针非常容易。