Как передать и перебрать список объектов из C # в NLua - PullRequest
1 голос
/ 21 мая 2019

как передать и перебрать список объектов из 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 ]

1 голос
/ 21 мая 2019

В Lua индексирование обычно начинается с индекса 1. С документы

В 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
0 голосов
/ 22 мая 2019

C # Списки имеют свойство Count. Может использоваться как верхняя граница для итераций:

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

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