xlua - c#中遍历LuaTable

遍历数组

public static void Test1(LuaTable luaObj_AllDatas)
{
    int cnt = luaObj_AllDatas.Length;
    for (int i = 1; i <= cnt; ++i)
    {
        luaObj_AllDatas.Get(i, out LuaTable luaObj_Data);
        using (luaObj_Data)
        {
            luaObj_Data.Get("Id", out int id);
            luaObj_Data.Get("Name", out string name);
            //......
        }
    }
}

 

遍历单一表

public static void Test2(LuaTable luaObj_Datas)
{
    luaObj_Datas.ForEach<int, LuaTable>((k, v) => {
        int id = k;
        LuaTable data = v;
        //......
    });
}

 

遍历复合表

public static void Test3(LuaTable luaObj_Datas)
{
    var keysAry = luaObj_Datas.GetKeys();
    foreach (object key in keysAry)
    {
        if (key is string)
        {
            string strKey = (string)key;
            luaObj_Datas.Get(strKey, out object val);
            CheckVal(val);
        }
        else if (key is double)
        {
            string numKey = (double)key;
            luaObj_Datas.Get(numKey, out object val);
            CheckVal(val);
        }
        else
        {
            luaObj_Datas.Get(key, out object val);
            CheckVal(val);
        }
    }
}

public static void CheckVal(object val)
{
    if (val is string)
    {
        string str = (string)val;
    }
    else if (val is double)
    {
        double d = (double)val;
    }
    else if (val is LuaTable)
    {
        var luaObj = (LuaTable)val;
        using (luaObj)
        {
            //......
        }
    }
    else
    {
        string str = val.ToString();
    }
}

 

posted @ 2026-03-04 23:54  yanghui01  阅读(0)  评论(0)    收藏  举报