Skip to main content

Marshal Cheatsheet

Authoritative full text: Marshal overview, LuaMarshalAs.

Shapes: ClassUserData, ByObjUserData, and ByValUserData are full userdata; OpaqueValue and unmanaged Pointer are lightuserdata.

Default Rules (Summary)

C# TypeC# → LuaLua → C#
Primitive / boolnumber/booleanSame as left
stringstringstring
byte[]ByObjUserDataByObj / table; [Bytes] → string
classClassUserDataClassUserData / nil
T[]ByObjUserDataByObj / table
mdarrayByObjUserDataByObj only (table not accepted)
enuminteger/numberinteger or boxed
structSee ByVal / ByObj / OpaqueSee STRUCT spec
DelegateDelegateUserDatafunction / userdata
ref/out/in (C#→Lua)OpaqueValue

[LuaMarshalAs] (Common)

LuaMarshalTypeEffect
DefaultTable above
UserDataForce full userdata
Bytesbyte[] ↔ Lua string
OpaqueLightUserDataC#→Lua opaque handle