在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处理,就像这样:
然后就开始查怎么获取enum对象代表的整数值:
- xlua会不会已经提供了解决方案?(文档里没找到,只有字符或整数如何转到enum对象)
- C#侧的enum是否提供了相应的接口?(百度了一下,千篇一律基本都是强转int(就硬抄))
- 那我就在C#侧强转enum到int,然后再传给lua侧?(可以是可以,那我可以这么做:
①修改xlua的binding代码,在绑定enum类型的对象时加上获取其具体数值的接口
②利用xlua的[LuaCallCSharp]标签,在C#侧实现一个转换函数,然后在lua侧调用
③这不都是小题大做么。。不靠谱
) - 继续以上方案2:既然enum在lua侧被视作一个userdata,那么查一下C#中enum的具体定义和实现。
然后就查到了传说中的enum所继承的枚举基类Enum,以及它提供的GetHashCode函数,在Lua侧直接调用GetHashCode获取具体的枚举值,问题解决。
怪自己对C#这门语言还不熟悉,不过网上那些教程实在是不靠谱。。。要查最好还是查第一手资料,也就是直接看代码或是权威性比较高的书。