У меня есть некоторый код, предназначенный для получения структуры из байтового массива:
public static T GetValue<T>(byte[] data, int start) where T : struct
{
T d = default(T);
int elementsize = Marshal.SizeOf(typeof(T));
GCHandle sh = GCHandle.Alloc(d, GCHandleType.Pinned);
Marshal.Copy(data, start, sh.AddrOfPinnedObject(), elementsize);
sh.Free();
return d;
}
Однако структура d
никогда не изменяется и всегда возвращает значение по умолчанию.
Я искал «правильный» способ сделать это и использую его вместо этого, но мне все еще любопытно, поскольку я не могу понять, почему вышеупомянутое не должно работать.
Это настолько просто, насколько это возможно: выделить немного памяти, d, получить указатель на него, скопировать несколько байтов в память, указанную этим, вернуть.Не только это, , но когда я использую подобный код, но с d, являющимся массивом T, он работает нормально. Если sh.AddrOfPinnedObject () не указывает на d
, но тогдасмысл этого?
Может кто-нибудь сказать мне, почему выше не работает?