跳到主要内容

编组速查表

未标注 [LuaMarshalAs](或 LuaMarshalType.Default)时的 默认编组。完整语义与边界见 编组规范 §1

UserData 形态: ClassUserData、ArrayUserData、StructUserData、enum userdata、DelegateUserData 均为 full userdata(带 metatable)。OpaqueValue、非托管 Pointerlightuserdata(无 metatable)。

默认规则总表

C# 类型C# → LuaLua → C#说明
boolbooleanboolean
charinteger / numberinteger / numberUnicode 码点
byteulonginteger / numberinteger / numberLua 5.4 优先 integer
float / doublenumbernumber
IntPtr / UIntPtr / nint / nuintinteger / numberinteger / number指针 数值
T* / void* / 函数指针lightuserdatalightuserdata透传,见 §7
TypedReference不支持不支持
stringstringstring
byte[]ArrayUserDataArrayUserData[Bytes] → string
classClassUserDataClassUserData / nilnil ↔ null
T[] / 多维ArrayUserDataArrayUserDataClass 编组
enuminteger / numberinteger / number 或 enum userdata默认非 userdata
structOpaqueValue (lightuserdata)StructUserData / tableC#→Lua 默认 StructHandle
DelegateDelegateUserDatafunction / DelegateUserDataFunction 编组
object按运行时类型bool/number/string/userdata多态
Nullable<T>T 或 nilT 或 nilT 为值类型
interfaceClassUserDataClassUserData同 class
decimal暂不支持暂不支持
ref struct见 struct 规范见 struct 规范非普通 by-val
void(返回)无返回值
null / nilnilnil引用类型、Nullable 等

integer 与 number

Lua 5.4+ 整型基元优先 integer;否则退化为 number(须为整数值)。Mono 与 Il2Cpp 可见语义一致

ref / out / in(Lua → C#)

Lua 实参C# ref/out/in 行为
StructUserDatanew_ref、struct _ctor 等)真 ref,C# 修改写回
裸 number / string / table 等拷贝到临时槽,不写回 Lua local

[LuaInvoke]、delegate bridge 不支持 ref/out。详见 ref 指南编组规范 §3

[LuaMarshalAs] 覆盖速查

LuaMarshalType主要效果典型场景
Default上表默认
UserData强制 full userdata基元/enum/string 需 boxed 形态
Bytesbyte[] ↔ Lua string二进制协议、原始 octet
OpaqueLightUserDataC#→Lua lightuserdata 临时句柄栈上 struct/object 槽;to_user_data 升级

各类型 合法组合LuaMarshalAs 参考规范 §6.2

分类型深入

类型文档
class / 数组 / 引用Class 编组
struct / enum userdataStruct 编组
Delegate / Lua functionFunction 编组
类型系统 / 枚举常量类型系统规范

相关文档