无法使用 nula 从 lua 脚本调用 .Count() IEnumerable 扩展

Cannot call .Count() IEnumerable extensions from lua script using nula

所以我有一个小 lua 脚本,我想在其中调用 IEnumerable 集合的扩展方法。

require ''CLRPackage''
import ''System.Collections.Generic''
import ''System.Linq''
import ''My.Namespace.Containing.AudioMarker''

local audioMarkersWithOffset = GetAudioMarkers();
local numberOfMarkers = audioMarkersWithOffset.Count();

所以 GetAudioMarkers() 是一个返回 AudioMarker 对象的 IEnumerable 的 C# 方法。执行 luanet.each 会很好,我将能够迭代到集合中的每个元素。但我需要该集合的计数并调用 .Count() 会出现以下错误: NLua.Exceptions.LuaScriptException: [string "chunk"]:54: 尝试调用 字段 'Count' (字符串值).

顺便说一下,我知道使用 nlua 你不需要预先注册你的类型来使用它们所以我尝试使用和不使用关于 AudioMarker 的最后导入,但得到了相同的结果.

我可能做错了什么,但我似乎无法在网上找到任何有助于解决此问题的文档。

我一直在尝试自己使用 IEnumerable<T>.ToList() 扩展方法,但测试表明 NLua 在使用泛型方法时存在一些问题。调用 void func<T>(<T> arg) 形式的方法如果您将其注册为 lua 函数 (Lua.RegisterFunction),则可以实现,但如果您尝试对处于 lua 状态的对象调用相同的方法,则会得到 "attempt to call method..." 错误。此外,void func<T>(IEnumerable<T> arg) 形式的方法在这两种情况下都会失败,分别出现 NullReferenceException 和 "attempt to call method..." 错误。

另一点是,如果你想从Lua调用C#扩展方法,你需要“:”语法,而不是“.”。 (参见 NLua "TestExtensionMethods" 单元测试)。