c#如何改进此委托相关代码

本文关键字:代码 何改进 | 更新日期: 2023-09-27 18:18:30

我正在考虑将一些c#/Lua接口代码从一个Lua库移动到另一个Lua库。因此,我需要重写50个或更多的方法绑定来使用新的库绑定接口。新的方法更加笨拙和笨拙,下面是一个如何绑定一个名为createTable()的c#方法的例子。

    // Delegates
    private delegate LuaTable dlgCreateTable();
    public LuaTable createTable()
    {
        LuaTable table = luaRuntime.CreateTable();
        return table;
    }

then I do ........  
    using (LuaFunction funcWrapper = luaRuntime.CreateFunctionFromDelegate(new dlgCreateTable(createTable)))
    {
        luaRuntime.Globals["createTable"] = funcWrapper;
    }

库给我绑定的唯一方法是luartime . createfunctionfromdelegate(),所以我必须使用这个构造。

这段代码对于1或2个独立的函数绑定是可以的,但是如果一个接一个地有50个左右的函数绑定,它看起来会很难看。如果我能以某种方式将方法细节放入c#表中,然后在循环中遍历它们,那看起来会更好。是否有可能改变createFunctionFromDelegate()行,使其能够围绕表进行迭代?如果可行,代码会是什么样子?

谢谢你的建议

Geoff

c#如何改进此委托相关代码

解决这个问题相当容易,我想我最初是被委托可能有点令人困惑的事实所推迟的。

这个工作很好,张贴信息。

    Dictionary<string, Delegate> methods = new Dictionary<string, Delegate> {
          { "createTable", new dlgCreateTable(createTable) },
          { "sleep", new dlgLuaSleep(luaSleep) },
          { "testMethod", new dlgTestMethod(testMethod) },
   };
     LuaTable bfTable = luaRuntime.CreateTable();
     luaRuntime.Globals["baseTable"] = bfTable;
     foreach (KeyValuePair<string, Delegate> entry in methods)
     {
        var key = entry.Key;
        var value = entry.Value;
        using (LuaFunction funcWrapper = luaRuntime.CreateFunctionFromDelegate(value))
        {
           bfTable[key] = funcWrapper;
        }
     }

那么在Lua中,我可以用简单的一行代码调用绑定函数,例如

    baseTable.sleep(1500)

目前我正在手动定义每个委托。

也许我可以通过使用Reflection从实际方法和方法签名中定义委托来改进这段代码。

如果有人知道如何做到这一点,我将感激一些建议。由于

Geoff