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