c# - 如何从 C# 到 NLua 传递和迭代对象列表

标签 c# nlua

我应该如何将对象列表从 C# 传递并迭代到 Lua?

我的示例使用 int 数组,当我使用自定义类时,我得到相同的结果:

state_ = new Lua();
state_.LoadCLRPackage();

var candidates = new int[] { 0, 1, 2, 3, 4, 5 };

state_["Candidates"] = candidates;

state_.DoString(script);

var b = state_["Candidates"] as int[];

return toRetrun;

脚本在哪里

-- Iterate each candidate
for k,v in ipairs(Candidates) do

    print(k, Candidates[k])

end

输出为:

1   1
2   2
3   3
4   4
5   5

它跳过第一个,我得到异常:“索引超出了数组的范围。” 我的代码有什么问题吗?

最佳答案

在Lua中,索引一般从索引1开始。来自docs

it is customary in Lua to start arrays with index 1

尝试这样的事情:

for i = 0, #Candidates do
     print(i, Candidates[i])
end

据我所知,ipairs() 仅支持 1 个索引,因此您必须定义自己的函数或仅使用常规函数。

我不确定,但也尝试一下

for k,v in ipairs(Candidates), Candidates, -1 do
  print(k, Candidates[k])
end

关于c# - 如何从 C# 到 NLua 传递和迭代对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56246049/

相关文章:

c# - 使用 NLua 的 C# 类实例

c# - 如何在 Lua 中注册 C# 类构造函数

c# - 如何获取此字符串中标签的 href 属性?

c# - 跟踪 40 多个控制值

c# - 如何使用 Unity IoC 在解析的具体类型上指定构造函数值?

c# - 如何从数据表中选择所有行

c# - ReaderWriterLock 在 ServiceBehavior 构造函数中不起作用

c# - 直接返回调用者的调用者并在下次调用时恢复状态