首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NLua在C#中注册和使用以List对象作为参数的函数

NLua在C#中注册和使用以List对象作为参数的函数
EN

Stack Overflow用户
提问于 2022-01-11 06:58:24
回答 1查看 182关注 0票数 2

目前,我正在一些前端工作中使用NLua在一些C#代码中。我在NLua中使用/注册非对象一点问题都没有,但当我想在方法中使用List作为参数时,它似乎不起作用。

这就是我目前正在工作的内容(减去突出显示哪些不起作用):

这是上面提到的不起作用的方法:

NLua不支持注册和使用作为对象的函数吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-07 14:01:08

不支持注册和使用作为对象的函数吗?

是的,您可以注册与您所做的类似的功能。您需要做的是传递包含要注册的方法的类的实例。

如下所示:

代码语言:javascript
复制
var myApi = new API();
lua.RegisterFunction("add", myApi, typeof(API).GetMethod("Add"));

通过将列表更改为LuaTable,我能够修复您的'add‘函数。我这样做是因为从Lua传递给C#的数组实际上是Lua表。然后,您只需遍历C#端的值,并执行您需要做的事情。

如下所示:

代码语言:javascript
复制
public string Add(LuaTable target)
{
    List<int> targetsToAdd = new();
        
    foreach(var item in target.Values)
    {
        // FIXME: assuming item won't be null here
        targetsToAdd.Add(int.Parse(item.ToString()!));
    }

    int sum = targetsToAdd.Aggregate((x, y) => x + y);
    return sum.ToString();
}

然后,在您的Lua脚本中您可以:

代码语言:javascript
复制
result = add({"2", "2"})
print(result) -- result = 4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70662744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档