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

How to pass and iterate a list of objects from C# to 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

它跳过了第一个,我得到了异常:"Index was outside the bounds of the array." 我的代码有什么问题?

在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。

我不确定但也试试

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

C# 列表的计数为 属性。它可以用作迭代的upper-bound:

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

[...]
-- Iterate each candidate
for candidateCount = 0, Candidates.Count - 1 do
[...]