C# 在Lua中访问userdata属性和方法
关于在LuaInterface中访问用户数据类型,我有一个问题。当我将C#字典传递给Lua并尝试使用ipairs对其进行迭代时,我得到了一个错误,因为ipairs需要的是一个表而不是一个userdata对象 我假设一个解决方案是在将字典类型传递给Lua之前将其转换为LuaTable类型,但我想将userdata类型用于的一个用途是将Dictionary对象引入Lua,并更新customType对象的字段,并在Lua中调用它们的方法。我不知道这是否可行,但我很确定如果我将该字典转换为字符串和int的LuaTable,我将失去从Lua直接与customType接口的机会C# 在Lua中访问userdata属性和方法,c#,dictionary,lua,luainterface,lua-userdata,C#,Dictionary,Lua,Luainterface,Lua Userdata,关于在LuaInterface中访问用户数据类型,我有一个问题。当我将C#字典传递给Lua并尝试使用ipairs对其进行迭代时,我得到了一个错误,因为ipairs需要的是一个表而不是一个userdata对象 我假设一个解决方案是在将字典类型传递给Lua之前将其转换为LuaTable类型,但我想将userdata类型用于的一个用途是将Dictionary对象引入Lua,并更新customType对象的字段,并在Lua中调用它们的方法。我不知道这是否可行,但我很确定如果我将该字典转换为字符串和int
我在网上查找了有关在Lua中使用userdata的信息,但我发现的几个例子是通过C/C++和堆栈与Lua的接口,我并不真正理解。此外,sizeof方法在某些情况下使用,在c#中没有简单的替代方法。谁能给我一些指点吗?C中关于用户定义类型的PIL部分也没有多大帮助。要使用LuaInterface/NLua迭代集合元素,需要使用luanet.each代替ipairs。您不需要从字典中创建LuaTable function luanet.each(o) local e = o:GetEnumerator() return function() if e:MoveNext() then return e.Current end end end luanet.each将使用
GetEnumerator
、MoveNext
和Current
在字典中迭代
function luanet.each(o)
local e = o:GetEnumerator()
return function()
if e:MoveNext() then
return e.Current
end
end
end
功能luanet.每个(o)
本地e=o:GetEnumerator()
返回函数()
如果e:MoveNext()那么
返回e.当前值
结束
结束
结束
对于ipairs(dict)中的x,使用代替。对于luanet.each(dict)中的x,使用
参考:要使用LuaInterface/NLua遍历集合元素,需要使用luanet.each而不是ipairs。您不需要从字典中创建LuaTable
function luanet.each(o)
local e = o:GetEnumerator()
return function()
if e:MoveNext() then
return e.Current
end
end
end
luanet.each将使用GetEnumerator
、MoveNext
和Current
在字典中迭代
function luanet.each(o)
local e = o:GetEnumerator()
return function()
if e:MoveNext() then
return e.Current
end
end
end
功能luanet.每个(o)
本地e=o:GetEnumerator()
返回函数()
如果e:MoveNext()那么
返回e.当前值
结束
结束
结束
对于ipairs(dict)中的x,使用代替。对于luanet.each(dict)中的x,使用
参考资料:从C#Dictionary构建Lua表的一个示例:使用C API构建Lua表非常简单。这样做的一个新例子:@Kamiccolo,复制字典与迭代从C#dictionary构建Lua表的原始示例不同:使用C API构建Lua表非常简单。一个新的例子是:@Kamiccolo,复制字典与迭代原始字典不同当我尝试在Lua中运行此代码时,我得到异常:尝试调用GetEnumerator(一个nil值)。我不知道为什么?我正在加载assembly System.Collections.Generict当我的字典类型为。x返回值[一,点击点。暂停+测试类]。如何访问testClass属性和方法?还有,x返回的是什么类型?如果我回到字典,它会输出[1,1],但这不是一个表,因为x[1]返回1,x[1][1]返回错误尝试索引?(数字值)…x将是字典值的类型,用于访问需要使用的方法和属性:或。就像使用常规的.NET对象一样,当我尝试在Lua中运行此代码时,会出现异常:尝试调用GetEnumerator(一个nil值)。我不知道为什么?我正在加载assembly System.Collections.Generict当我的字典类型为。x返回值[一,点击点。暂停+测试类]。如何访问testClass属性和方法?还有,x返回的是什么类型?如果我回到字典,它会输出[1,1],但这不是一个表,因为x[1]返回1,x[1][1]返回错误尝试索引?(数字值)…x将是字典值的类型,用于访问需要使用的方法和属性:或。就像使用常规的.NET对象一样。