UH2S2L13——Lua调用数组、List和Dictionary
UH2S2L13——Lua调用数组、List和Dictionary
本章代码关键字
1 | CS.System.Array.CreateInstance() --创建数组 |
调用数组
先在C#脚本内声明如下内容
1 | public class Lesson3 |
调用长度
对于数组长度的获取,C#怎么用,lua就怎么用,不能使用#
去获取长度,因为这里实际上在使用C#的数组对象,而非Lua的表
1 | local obj = CS.Lesson3() |
访问元素
访问元素就直接使用[索引]
即可,需要注意,由于使用的是C#的数组而非Lua的,因此索引照样从0开始!
1 | print(obj.array[0]) |
遍历数组
如果要遍历数组,需要注意,由于使用的是C#的数组而非Lua的,因此索引照样从0开始,同样的,for循环的最大值填入长度时也需要减1
Lua创建C#数组
这里的创建数组和Lua声明表不同,创建是创建C#中的数组 使用Array类中的静态方法CreateInstance
即可
第一个参数传入要创建数组的类型,第二个参数传入数组长度
1 | local array2 = CS.System.Array.CreateInstance(typeof(CS.System.Int32), 10) |
调用List
添加元素
Add
是成员方法,因此调用必须用冒号!!!!!!
1 | obj.list:Add(1) |
获取长度与遍历
和数组的使用方法一样
1 | print(obj.list.Count) |
Lua创建C#List
老版本
需要引用列表相关的命名空间System.Collections.Generic
,再通过索引["List
1[命名空间.类型]"]`,其中1是泛型的参数个数
1 | local list2 = CS.System.Collections.Generic["List`1[System.String]"]() |
新版本
XLua版本大于2.1.12时,可以使用更简单的方法
首先使用CS.System.Collections.Generic.List(CS.命名空间.类型)
,创建对应的类
再通过这个类实例化创建列表
1 | local List_String = CS.System.Collections.Generic.List(CS.System.String) |
调用Dictionary
使用仍然和C#的字典一致,但是要注意,成员方法同样要使用冒号:
调用
1 | obj.dic:Add(1, "123") |
遍历字典
这里的遍历就一定要使用pairs的for循环
1 | obj.dic:Add(1, "123") |
Lua创建C#字典
这里只介绍新版本的实例化方法,和上面的List新版本创建大致相同
1 | local Dic_String_Vector3 = CS.System.Collections.Generic.Dictionary(CS.System.String, CS.UnityEngine.Vector3) |
虽然遍历没有出现问题,但是很明显,在Lua中创建的字典,直接通过 [键]
去获取值是得不到的
我们必须要通过一个固定的成员方法****字典:get_Item(键)
获取,同样的,设置值也需要****字典:get_Item(键, 值)
1 | print(dic2["123"]) |
TryGetValue
TryGetValue
的第一个返回值是是否存在值,第二个返回值才是具体的值,对在原本在C#中的字典与在Lua中创建的字典都可用
1 | print(dic2["123"]) |