Lesson3_Lua调用C#_CallArray、List、Dictionary

local obj = CS.Lesson3()//这里创建了一个Lesson3对象
//Lesson3的声明如下

public class Lesson3
{
    public int[] array = new int[5] { 1, 2, 3, 4, 5 };
    public List<int> list = new List<int>();
    public Dictionary<int, string> dic = new Dictionary<int, string>();
}

--Lua得到C#中的数据结构时都是属于Lua的userData(保留原本脚本(C#)中的结构),不能通过lua的方式(#)去获得长度等等
--长度
print(obj.array.Length)
print(obj.array[0])
--遍历 依然遵从c#那边的规则,索引从0(lua本身的数组索引从1开始)开始,lua的for会取到最大值所以长度-1
for i=0,obj.array.Length-1 do
print(obj.array[i])
end
--创建C#数组 用c#中数组的静态方法
local array = CS.System.Array.CreateInstance(typeof(CS.System.Int32),6) //这里创建了一个int类型,长度为6的数组
print(array.Length)
print(array[0])

--Lua使用C#类调用成员方法时一定要用冒号调用
obj.list:Add(1)
print(obj.list.Count)
--如何在Lua创建一个List对象,而非获取C#脚本中的对象
--老版本
local list2=CS.System.Collections.Generic"List`1[System.String]" --老版本此时list2已经是一个string类型的List对象了
list2:Add(13)
print(list2[0])
--新版本 xlua>v2.1.12
local List_String = CS.System.Collections.Generic.List(CS.System.String)--新版本先得到对应泛型的List类
local list3 = List_String()--再通过()去调用类的无参构造创建对象,也可以在上面的List_String后面直接跟个括号直接调用构造函数
list3:Add(24)
print(list3[0])

--Lua使用C#的Dictionary
obj.dic:Add(1,"123")
print(obj.dic[1])
for k,v in pairs(obj.dic) do
print(k,v)
end
--Lua端创建一个Dictionary
--老版本太复杂,自己搜
--新版本
local Dic_String_Vector3 = CS.System.Collections.Generic.Dictionary(CS.System.String,CS.UnityEngine.Vector3)
local dic3=Dic_String_Vector3()//得到一个键位String,值为Vector3的Dictionary
dic3:Add("213",CS.UnityEngine.Vector3.right)

print(dic3["213"])--Lua中创建的Dic,这样访问是得不到数值的,会返回nil
print(dic3:get_Item("213"))--这样获得就可以,通过调用Dictionary的成员方法获得
dic3:set_Item("213",nil) --设置也同理
print(dic3:get_Item("213"))

posted @ 2024-02-29 11:15  波奇型蠢驴  阅读(22)  评论(0)    收藏  举报