tgoop.com/unsafecsharp/266
Create:
Last Update:
Last Update:
Marshal.OffsetOf
С помощью этого метода я в BECS нахожу где фактически находится поле в структуре, в которое я хотел бы записать данные.
Я это использую в кодогене, когда я точно знаю название поля и хочу вписать туда данные, но использовать рефлексию для этого нет никакого желания.
Работает примерно так:
var offset = Marshal.OffsetOf(type, field.Name);
codeGenOutput.Add($"var addr = (byte*)_addressOf(ref obj) + {offset};");
codeGenOutput.Add($"*(({objType}*)addr) = new SomeStruct(...);");
В итоге получается, что мы просто записываем данные в структуру obj без рефлексии и нам не важно приватное там поле или публичное.
#unsafe #fieldoffset #marshal
BY Unity: Всё, что вы не знали о разработке
Share with your friend now:
tgoop.com/unsafecsharp/266