Tolua使用笔记五:lua中遍历访问c#的Dictionary类对象与枚举类型
2017-05-26 11:40
781 查看
原文地址:http://blog.csdn.net/qq_30168505/article/details/70495599
这一部分主要讲的是如何在lua代码中访问C#中的Dictionary对象与枚举类型,相比之之前的算是比较简单的了,基本上看一下就完全会使用了
案例9:
lua访问C#中的Dictionary
首先:作者也说过,对于这个例子中的方法BindMap()方法无需可以关注,这个只是为了保证例子可以独立运行,平时的开发中只需要将需要的类型添加在在CustomSetting的列表之中即可。
核心代码比较少:
除了以上的接口,笔者验证过C#中的Dictionary的大多数方法也可以在lua中以正常使用,需要记得的是类成员方法调用时是
: 而不是 .
这里还是给个详细列表来凑个长度吧:
~~~这里的方法的参数列表我就不给了哈,和C#中是一致的,,,,,,,
效果截图如下:
顺便说一句的,C#中的NULL在lua中会被识别成nil,这样就方便了lua中对于NULL的检测
案例10:
lua访问C#中的枚举类型
这个案例中所访问的枚举类型是UnityEngine中自带的Space类型
核心代码如下:
tostring(枚举变量)
可以输出该枚举变量的变量名
枚举变量:ToInt() 可以将枚举变量转化为对应的整数
枚举类型.IntToEnum() 可以将整数转化为对应的枚举变量
枚举变量:Equals(整数) 可以实现整数与枚举变量的比较
2个枚举变量之间可以直接使用 == 来判断是否相等
并可以直接赋值
分为2种:
1: 枚举变量 = 枚举变量
2: 枚举变量 = 枚举类型.枚举值
效果截图如下:
基本上就是这些了,这些Tolua#的枚举变量相关的方法相比于之前的ulua,有了一定的扩充,使用上感觉较之前的方便了很多~~~
然后让我们下章再见
这一部分主要讲的是如何在lua代码中访问C#中的Dictionary对象与枚举类型,相比之之前的算是比较简单的了,基本上看一下就完全会使用了
案例9:
lua访问C#中的Dictionary
首先:作者也说过,对于这个例子中的方法BindMap()方法无需可以关注,这个只是为了保证例子可以独立运行,平时的开发中只需要将需要的类型添加在在CustomSetting的列表之中即可。
核心代码比较少:
function TestDict(map) local iter = map:GetEnumerator() while iter:MoveNext() do local v = iter.Current.Value print('id: '..v.id ..' name: '..v.name..' sex: '..v.sex) end end这里lua函数中传入的map就是C#中的Dictionary对象,我们可以通过Dictionary对象的GetEnumerator方法获取到该对象的枚举计数器,然后通过调用该iter.Current.value则可以访问到枚举计数器所指向的值,可以使用iter:MoveNext()来是枚举计数器访问下一个元素,在lua中,iter:MoveNext()在访问越界时会返回一个nil,所以可以通过以上的结构来遍历C#中的Dictionary。
除了以上的接口,笔者验证过C#中的Dictionary的大多数方法也可以在lua中以正常使用,需要记得的是类成员方法调用时是
: 而不是 .
这里还是给个详细列表来凑个长度吧:
Dictionary:get_Item() --获取与指定的键相关联的值 Dictionary:set_Item() --设置与指定的键相关联的值 Dictionary:Add() --将指定的键和值添加到字典中 Dictionary:Clear() --从 Dictionary中移除所有的键和值 Dictionary:ContainsKey() --确定 Dictionary是否包含指定的键 Dictionary:ContainsValue() --确定 Dictionary是否包含特定值 Dictionary:GetObjectData() Dictionary:OnDeserialization() Dictionary:Remove() --从 Dictionary中移除所指定的键的值 Dictionary:TryGetValue() --获取与指定的键相关联的值 Dictionary:GetEnumerator() --返回循环访问 Dictionary的枚举数 Dictionary:New() --这个是创建一个字典的方法 Dictionary.this --对象的this引用 Dictionary.__tostring --返回表示当前 Object的 String,这里其实并非C#对象的那个Tostring().而是作者自己重新等装的,但是效果类似,不用纠结, --只不过不是方法而是对象了 Dictionary.Count --获取包含在 Dictionary中的键/值对的数 Dictionary.Comparer --获取用于确定字典中的键是否相 Dictionary.Keys --获取包含 Dictionary中的键的集合 Dictionary.Values --获取包含 Dictionary中的值的集合
~~~这里的方法的参数列表我就不给了哈,和C#中是一致的,,,,,,,
效果截图如下:
顺便说一句的,C#中的NULL在lua中会被识别成nil,这样就方便了lua中对于NULL的检测
案例10:
lua访问C#中的枚举类型
这个案例中所访问的枚举类型是UnityEngine中自带的Space类型
核心代码如下:
string script = @" space = nil function TestEnum(e) print('Enum is:'..tostring(e)) if space:ToInt() == 0 then print('enum ToInt() is ok') end if not space:Equals(0) then print('enum compare int is ok') end if space == e then print('enum compare enum is ok') end local s = UnityEngine.Space.IntToEnum(0) if space == s then print('IntToEnum change type is ok') end end function ChangeLightType(light, type) print('change light type to Directional') light.type = UnityEngine.LightType.Directional end "; void Start () { LuaState state = new LuaState(); state.Start(); LuaBinder.Bind(state); state.DoString(script); state["space"] = Space.World; LuaFunction func = state.GetFunction("TestEnum"); func.BeginPCall(); func.Push(Space.World); func.PCall(); func.EndPCall(); func.Dispose(); func = null; GameObject go = GameObject.Find("/Light"); Light light = go.GetComponent<Light>(); func = state.GetFunction("ChangeLightType"); func.BeginPCall(); func.Push(light); func.Push(LightType.Directional); func.PCall(); func.EndPCall(); func.Dispose(); func = null; state.CheckTop(); state.Dispose(); state = null; }主要的方法如下:
tostring(枚举变量)
可以输出该枚举变量的变量名
枚举变量:ToInt() 可以将枚举变量转化为对应的整数
枚举类型.IntToEnum() 可以将整数转化为对应的枚举变量
枚举变量:Equals(整数) 可以实现整数与枚举变量的比较
2个枚举变量之间可以直接使用 == 来判断是否相等
并可以直接赋值
分为2种:
1: 枚举变量 = 枚举变量
2: 枚举变量 = 枚举类型.枚举值
效果截图如下:
基本上就是这些了,这些Tolua#的枚举变量相关的方法相比于之前的ulua,有了一定的扩充,使用上感觉较之前的方便了很多~~~
然后让我们下章再见
相关文章推荐
- Tolua使用笔记五:lua中遍历访问c#的Dictionary类对象与枚举类型
- Tolua使用笔记二:lua与C#的函数,变量交互方法
- C# 2010 从入门到精通 学习笔记8 第9章 使用枚举和结构来创建值类型
- Tolua使用笔记六:在lua中操作C#的委托事件与在lua中对Unity的GameObject的操作
- C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型
- Tolua使用笔记六:在lua中操作C#的委托事件与在lua中对Unity的GameObject的操作
- Tolua使用笔记二:lua与C#的函数,变量交互方法
- 《C# 设计模式》笔记: 第4章 在C#中使用类和对象
- 如何:通过使用 Visual C# 2010 功能访问 Office 互操作对象(C# 编程指南)
- switch case 遍历 table表头的时候使用枚举来便利 (switch 不支持字符串类型,用这种方式来达到使用目的)
- C#中String的数据类型以及使用new时的对象分配情况
- c#学习笔记之枚举使用
- C#_delegate - Pair<T> & 简单顺序逆序 & 方法委托(在Pair类下)&枚举类型 混搭使用
- Professional C# 学习笔记(三 c#对象和类型)
- C# 中的 enum(枚举) 类型使用例子
- struts2对一些属性的使用和对session封装对象类型采用jstl技术的遍历(配图解)
- [2004-8-4]VB.Net学习笔记,使用ADO.Net对象访问数据库,将结果写入ListView
- 09 C# 第八章 值类型 ------ 装箱操作和枚举的使用
- WinCE5.0移动平台开发笔记(c#中使用多线程访问winform中控件的若干问题(zt))
- C#特性 学习笔记(对象初始化器 匿名类型 扩展方法)