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

问题描述 投票:0回答:3

我应该如何将对象列表从 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

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

c# nlua
3个回答
1
投票

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

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

1
投票

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

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

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

0
投票

要在 NLua 中迭代 C# 中的对象列表,您可以简单地执行以下操作:

 for candidate in luanet.each(Candidates) do
   print(candidate)
 end
© www.soinside.com 2019 - 2024. All rights reserved.