ToLua是使用原生C#List
- 介绍
- Lua中使用原生List
-
- C#调用lua
- Lua中操作
- 打印测试如下
- Lua中使用原生Dictionary
-
- C#调用lua
- Lua中操作
- 打印测试如下
介绍
当你用ToLua时C#和Lua之间肯定是会互相调用的,那么lua里面使用List和Dictionary肯定是必然的,在C#中可以调用LuaTable、LuaDictTable、LuA服务器托管网rrayTable这三种和List、Dictionary进行互相转换和调用,在Lua里面其实也可以将List和Dictionary转换成LuaTable,不转换当然也可以使用。
Lua中使用原生List
这里我会将一些我用到的基础用法列举一下,List自定义的T也是支持的,这里不具体展示了
下面是两个List表传入到Lua中,在lua中操作两个List
C#调用lua
无GC的调用可以参考我无GC调用lua的文章
Listint> lst = new Listint>();
lst.Add(2);
lst.Add(3);
lst.Add(4);
Listint> lst2 = new Listint>();
lst2.Add(10);
lst2.Add(11);
lst2.Add(12);
//Util.CallMethod("UIMainCityCtrl", "CSharpListTest", lst, lst2);
Util.NoGCCallMethodListint>,Listint>>("UIMainCityCtrl", "CSharpListTest", lst, lst2);
Lua中操作
这里其实已经把List打了Wrap文件,所以List是可以在lua中直接调用如下所示的一些常规操作
function UIMainCityCtrl.CSharpListTest(CSharpList,lst2)
CSharpList:Add(555)
this.LstLog(CSharpList)
logError(tostring(CSharpList:Contains(555)))
CSharpList:Remove(555)
this.LstLog(CSharpList)
CSharpList:AddRange(lst2)
this.LstLog(CSharpList)
CSharpList:RemoveAt(0)
CSharpList:Insert(0, 123)
this.LstLog(CSharpList)
CSharpList:Clear()
this.LstLog(CSharpList)
end
function this.LstLog(lst)
logError("Count = "..lst.Count)
for i=0,lst.Count - 1 do
logError("lst["..i.."]"..lst[i])
end
end
打印测试如下
可以结合我上面的代码部分和操作对比一下下面的打印
Lua中使用原生Dictionary
C#调用lua
无GC的调用可以参考我无GC调用lua的文章
Dict服务器托管网ionaryint,int> dic1 = new Dictionaryint,int>();
dic1.Add(1, 10);
dic1.Add(2, 20);
Dictionaryint,int> dic2 = new Dictionaryint,int>();
dic2.Add(3, 30);
dic2.Add(4, 40);
//Util.CallMethod("UIMainCityCtrl", "CSharpListTest", lst, lst2);
Util.NoGCCallMethodDictionaryint, int>, Dictionaryint, int>>("UIMainCityCtrl", "CSharpListTest", dic1, dic2);
Lua中操作
这里其实已经把List打了Wrap文件,所以List是可以在lua中直接调用如下所示的一些常规操作
function UIMainCityCtrl.CSharpListTest(dic1,dic2)
logError("dic1[1] = "..dic1[1])
logError("dic1[2] = "..dic1[2])
logError("dic2[3] = "..dic2[3])
logError("dic2[4] = "..dic2[4])
this.LstLog(dic1)
this.LstLog(dic2)
dic1:Add(3,50)
dic1:Add(4,60)
this.LstLog(dic1)
logError("dic1:ContainsKey()"..tostring(dic1:ContainsKey(1)))
logError("dic1:ContainsValue()"..tostring(dic1:ContainsValue(3)))
dic1:Clear()
this.LstLog(dic1)
end
function this.LstLog(dic)
logError("Count = "..dic.Count)
local iter = dic:GetEnumerator()
while iter:MoveNext() do
local k = iter.Current.Key
local v = iter.Current.Value
logError("k = "..k.." , v = "..v)
end
end
打印测试如下
可以结合我上面的代码部分和操作对比一下下面的打印
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
前两天群里有人问到这个问题,我想着在网上找个教程发给他,没想到这玩意还挺新鲜?网上基本上找不到实质性的回答… 关于这个问题,其实挺简单的,微信的版本号其实就写在注册表中,读取它就完事了~ 打开注册列表 找到【计算机HKEY_CURRENT_USERSoft…