У меня есть экземпляр типа object
, из которого я знаю, что это указатель (можно легко проверить с помощью myobject.GetType().IsPointer
). Можно ли получить значение указателя через отражение?
код пока:
object obj = .... ; // type and value unknown at compile time
Type t = obj.GetType();
if (t.IsPointer)
{
void* ptr = Pointer.Unbox(obj);
// I can obtain its (the object's) bytes with:
byte[] buffer = new byte[Marshal.SizeOf(t)];
Marshal.Copy((IntPtr)ptr, buffer, 0, buffer.Length);
// but how can I get the value represented by the byte array 'buffer'?
// or how can I get the value of *ptr?
// the following line obviously doesn't work:
object val = (object)*ptr; // error CS0242 (obviously)
}
Дополнение №1: Поскольку рассматриваемый объект имеет тип значения , а не ссылочный тип, я не могу использовать
GCHandle::FromIntPtr(IntPtr)
, за которым следует GCHandle::Target
для получения значения объекта. ..