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

时间:2019-05-21 20:40:56

标签: 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

它跳过了第一个,但我得到一个例外:“索引在数组的边界之外。” 我的代码有什么问题?

2 个答案:

答案 0 :(得分:1)

在Lua中,索引通常从索引1开始。从docs

  

Lua习惯以索引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

答案 1 :(得分:0)

C#列表具有Count属性。可用作迭代的上限:

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

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