Eug*_*yos 1 .net c# reflection unsafe managed
我需要获取任意类型数组的第一个元素的内存地址,该数组存储为Object类型。例如,数组可以是 double[] 或 int[],但在代码中它会被输入为 Object。
虽然获取已知类型数组的地址很简单,但在 C# 中不允许获取对象的地址。是否有一种类型(Object 除外)可以用来存储这样的数组,并且可以更轻松地获取其内存地址?或者有没有办法使用互操作/反射直接访问地址而无需中间数据副本?
请注意,在下面的第二行中,double[] 被存储为一个对象。请注意,在 fixed() 行中,我正在尝试获取 o 的地址,这在 C# 中是不允许的。
提前致谢!
int len=100;
object o = new double [len];
unsafe
{
fixed(int*ptr=&o)
for (int index = 0; index < len; index++)
{
// access data directly to copy it, etc...
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用GCHandle以下方法实现此目的:
int len=100;
object x = new long[len];
unsafe
{
var gch = GCHandle.Alloc(x, GCHandleType.Pinned);
try
{
void* addr = (void*)gch.AddrOfPinnedObject();
// do whatever you want with addr
}
finally
{
gch.Free();
}
}
Run Code Online (Sandbox Code Playgroud)
只要确定你真的需要这个。