1

我正在尝试遍历 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.

如果我只在 key 处询问值visibility,我会得到正确的答案,但我无法遍历键和值。

我应该使用哪个类而不是DictionaryEntry?

谢谢,兹比尼克

4

2 回答 2

2

好吧,找到了解决方案 - 以下代码有效:

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-09T06:48:14.073 回答
0

虽然 LuaTable 有 GetEnumerator/Keys/Values 方法,但它不是从 IDictionary 继承的。以下内容可能仍然适用: http: //lua-users.org/lists/lua-l/2005-01/msg00662.html。另请参阅如何在 C#中的自定义对象上使用 foreach 关键字。您可能必须扩展 LuaTable,或者更糟糕的是,修补它。

于 2014-01-08T20:29:44.253 回答