C# LuaInterface-返回LuaTable值的函数

C# LuaInterface-返回LuaTable值的函数,c#,lua,luainterface,C#,Lua,Luainterface,有人知道如何编写一个C#函数来返回一个可计算的值(例如{1=“example1”,2=234,“foo”=“foo example”}? 我测试过的所有类型都返回了非pair/ipairable的LuaUserData值。 提前谢谢 --更新-- 在我看来,最接近luaTable的类型是ListDictionary: [LuaFunc(Name = "table", Desc = "returns test LuaTable", Params = new string[] { }

有人知道如何编写一个C#函数来返回一个可计算的值(例如
{1=“example1”,2=234,“foo”=“foo example”}
? 我测试过的所有类型都返回了非pair/ipairable的
LuaUserData
值。 提前谢谢

--更新-- 在我看来,最接近luaTable的类型是ListDictionary:

        [LuaFunc(Name = "table", Desc = "returns test LuaTable", Params = new string[] { })]
    public System.Collections.Specialized.ListDictionary table()
    {
        var k = new System.Collections.Specialized.ListDictionary(){
            {"1",1},
            {2,"2"}
        };

        return k;
    }

但是它在Lua中仍然被认为是LuaUserData,不能成对/ipaired

对于这个问题有两种可能的解决方案

首先,让Lua返回表:

LuaTable lt = (LuaTable) lua.DoString("return {1 = "example1", 2 = 234, "foo" = "Foo Example"}")[0];
第二种可能是创建一个新表

LuaTable lt = lua.NewTable("ThisTable")
lt["1"] = "example1"
lt["2"] = 234
lt["foo"] = "Foo Example"
您可以从Lua到访问第二个表

ThisTable[1] = ThisTable["foo"]

user1829325提供了极好的方法,尽管它们不需要修改就可以编译。
lua.DoString返回数组,lua.NewTable不返回任何内容。 但它让我找到了下面的解决方案,它运行得非常完美,所以不管怎样+1

public LuaTable CreateTable()
{
    return (LuaTable)lua.DoString("return {}")[0];
}
一个C#函数返回一个表,该表应该从Lua调用,它可以如下所示:

LuaTable newtable = CreateTable();
table["lala"] = 5;
return table;
我还编写了一个marshall函数,它使用上面的函数将字典转换为LuaTable:

private LuaTable MarshalDictionaryToTable<A,B>(Dictionary<A, B> dict)
{
    LuaTable table = runner.CreateTable();
    foreach (KeyValuePair<A, B> kv in dict)
        table[kv.Key] = kv.Value;
    return table;
}
专用LuaTable MarshalDictionaryTable(字典目录)
{
LuaTable table=runner.CreateTable();
foreach(dict中的键值对kv)
表[kv.键]=kv.值;
返回表;
}

JCH2k是正确的。NewTable没有返回类型

使用JCH2k逻辑,我能够使这个函数将c#点转换为LuaTable

public LuaTable ConvertPointToTable(Point point)
{
return (LuaTable)lua.DoString("return {" + point.X + ", " + point.Y + "}")[0];
}
在Lua中使用一次返回

local x = val[1]
local y = val[2]

请提供一个源代码示例,说明您当前如何在C#端构造表及其值。您正在使用哪些函数以及如何使用Lua虚拟堆栈?您可能会发现这篇堆栈溢出文章很有帮助。我已经找到了这种方法,但我正在寻找C#解决方案。不确定“C#解决方案”是什么意思因为StAcExcel是C语言,问题是LUA引擎是用C语言编写的,所以你必须有一个C到C接口来进行二者之间的封送和转换。用C或C++,直接使用Lua引擎中提供的函数,允许你在LuaV上建立表和这样的函数。然后调用将生成的表提供给Lua引擎的函数。