我正在尝试迭代NLua中的JArray
,但不能以某种方式。
JArray被用作userdata(什么是userdata?),因此无法迭代。
使用c#方法将JArray
转换为JValue[]
也不起作用。
据我所知,有两种可能的解决方案。 1.为nlua获得一个有效的Iterable功能。 2.将JArray转换为Lua表,然后在其上使用for循环。
我在这两个方面都没有成功。 是否有人对此有更多经验? 提前谢谢。
我尝试过的事情:
regCommands是一个JArray,在JTokens中包含许多JObject
jArray = Json:parseJArray(regCommands)
for k, v in ipairs(jArray) do
print(k.. " ".. v)
end
这给了ipairs(jArray)jArray是userdata的错误。
Json:parseJArray(JArray)
是一个c#函数,它接受一个JArray并吐出一个JToken []
我试过的其他事情:
keyVal = regCommands.First
while keyVal ~= nil do
if (type(JProperty)) then
regCommands[keyVal.Name:lower()] = keyVal.First
end
keyVal = keyVal.Next
end
这次崩溃了
regCommands[keyVal.Name:lower()] = keyVal.first
除了任何合乎逻辑的原因。
即使获得c#枚举器也无法正常工作
enumCommands = regCommands:GetEnumerator()
enumCommands:MoveNext()
repeat
enumCommands:MoveNext()
until enumCommands:Current() ~= nil
答案 0 :(得分:2)
要遍历.NET集合,您可以使用luanet.each函数,该函数将返回迭代.NET可枚举对象的函数。
local each = luanet.each
for k in each(jArray) do
print (k)
end