【发布时间】:2011-11-02 07:01:16
【问题描述】:
我正在尝试将 Lua 表转换为 C# 字节数组。我能够转换为 Double 数组,如下所示:
> require 'CLRPackage'
> import "System"
> tbl = {11,22,33,44}
> dbl_arr = Double[4]
> dbl_arr:GetValue(0)
> dbl_arr:GetValue(1)
> for i=0,3 do Console.WriteLine(dbl_arr:GetValue(i)) end
0
0
0
0
> for i,v in ipairs(tbl) do dbl_arr:SetValue(v,i-1) end
> for i=0,3 do Console.WriteLine(dbl_arr:GetValue(i)) end
11
22
33
44
>
但是,如果我将 dbl_arr 更改为 Byte 数组 (dbl_arr = Byte[4]),则会收到以下错误:(error object is not a string)
我尝试了很多不同的事情,但都没有运气。任何帮助将不胜感激。
更新:
通过这样做,我能够从错误中获得更多信息:
suc,err = pcall(function() byte_arr:SetValue(12,0) end)
现在suc 为假,err 返回以下消息:
SetValue failed
System.ArgumentException: Cannot widen from source type to target type either
because the source type is a not a primitive type or the conversion cannot
be accomplished.
at System.Array.InternalSetValue(Void* target, Object value)
at System.Array.SetValue(Object value, Int32 index)
我已经从here 安装了 luaforwindows。它的版本是 5.1.4-45。我正在运行 Microsoft Windows XP Professional Version 2002 Service Pack 3
更新:
这是示例代码以及发生错误的位置
> require 'CLRPackage'
> import "System"
> tbl = {11,22,33,44}
> dbl_arr = Byte[4]
> for i,v in ipairs(tbl) do dbl_arr:SetValue(v,i-1) end <-- Error occurs here
【问题讨论】:
-
dbl_arr来自哪里? -
@Nicol - 它只是我创建的一个 Double 数组:
dbl_arr = Double[4] -
很公平。我的意思是
Double[4]来自哪里。是否使用某种元表来使用 [] 创建对象? -
@Nicol,这就是 LuaInterface syntax 创建一个新的
Doubles 数组。您描述的元表方法可能是它在幕后完成的方式。 -
MSDN:
Array.SetValue在“当前的Array不具有精确的一维”时抛出ArgumentException。因此,LuaInterface 中可能存在错误。
标签: .net arrays lua luainterface clrpackage