在 c# 中循环遍历 LuaTable

我正在尝试在C#中迭代LuaTable对象,但遇到错误。

我的lua文件如下:

config = {}
config.visibility = 0

我的C#代码如下:

LuaTable config = lua.GetTable("config");
Console.WriteLine(config["visibility"].ToString());
foreach (DictionaryEntry member in config)
{
    Console.WriteLine("({0}) {1} = {2}",
        member.Value.GetType().ToString(),
        member.Key,
        member.Value);
}

输出如下:

0

Unhandled Exception: System.InvalidCastException: Cannot cast from source type to destination type.

如果我只要求在键 visibility下的值,我会得到正确的答案,但我无法迭代键和值。

我应该使用哪个类代替DictionaryEntry

谢谢, Zbynek

点赞
用户869951
用户869951

虽然 LuaTable 拥有 GetEnumerator/Keys/Values 方法,但它并没有继承自 IDictionary。以下链接可能仍然适用:http://lua-users.org/lists/lua-l/2005-01/msg00662.html。同时,也可以参考 How to use foreach keyword on custom Objects in C#。你可能需要扩展 LuaTable 或者更糟的是对其进行补丁。

2014-01-08 20:29:44
用户2882245
用户2882245

好的,解决方案已找到 - 以下代码可用:

LuaTable tb = lua.GetTable("config");

Dictionary<object, object> dict = lua.GetTableDict(tb);

foreach (KeyValuePair<object, object> de in dict)
{
    Console.WriteLine("{0} {1}", de.Key.ToString(), de.Value.ToString());
}

我仍然不知道为什么遍历 LuaTable 不起作用,所以我会将这个问题留着。

此外-如果我将键和值的类型设置为与 object 不同的类型(例如 stringint),则会产生“Cannot convert type 'System.Collections.Generic.KeyValuePair<string,int>' to 'System.Collections.Generic.KeyValuePair<object,object>'” 错误。

因此,暂时将其作为解决方法,任何建议仍将受到欢迎。

2014-01-09 06:48:14