在Lua中访问C#枚举对象

在Unity使用Lua与C#互调时,遇到Lua访问C#枚举对象的问题。通过xlua绑定,发现C#的enum被视为class,无法直接作为number处理。最终通过调用C# Enum类的GetHashCode方法在Lua侧获取枚举值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Lua中访问C#枚举对象

最近在unity中尝试Lua与C#的互调(用xlua生成相关的binding代码),在Lua中访问C#侧产生的enum枚举对象时碰上个问题:
按照xlua提供的绑定接口,与用户自定义类型(class、struct)相同,lua侧现在通过生成一个userdata的方式引用C#侧的enum对象,这说明对xlua而言,C#中的enum也被视作一个class来制定binding规则
这就导致我不能想当然地直接将C#中的某个枚举对象作为lua中的number处理,就像这样:
LuaEnum
CSharpEnum
然后就开始查怎么获取enum对象代表的整数值:

  1. xlua会不会已经提供了解决方案?(文档里没找到,只有字符或整数如何转到enum对象)
  2. C#侧的enum是否提供了相应的接口?(百度了一下,千篇一律基本都是强转int(就硬抄))
  3. 那我就在C#侧强转enum到int,然后再传给lua侧?(可以是可以,那我可以这么做:
    ①修改xlua的binding代码,在绑定enum类型的对象时加上获取其具体数值的接口
    ②利用xlua的[LuaCallCSharp]标签,在C#侧实现一个转换函数,然后在lua侧调用
    ③这不都是小题大做么。。不靠谱
    )
  4. 继续以上方案2:既然enum在lua侧被视作一个userdata,那么查一下C#中enum的具体定义和实现

然后就查到了传说中的enum所继承的枚举基类Enum,以及它提供的GetHashCode函数,在Lua侧直接调用GetHashCode获取具体的枚举值,问题解决。
怪自己对C#这门语言还不熟悉,不过网上那些教程实在是不靠谱。。。要查最好还是查第一手资料,也就是直接看代码或是权威性比较高的书。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值