无法调用 .Count() 来自 lua 脚本的 IEnumerable 扩展使用 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() 是一个 C# 方法,返回 IEnumerable 的 AudioMarker 对象。做一个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 状态中存在的对象调用相同的方法,则会得到"尝试调用方法..."错误。此外,形式void func<T>(IEnumerable<T> arg)的方法在这两种情况下都会失败,NullReferenceException和"尝试调用方法..."分别错误。

另一点是,如果要从Lua调用C#扩展方法,则需要":"语法,而不是"。(请参阅 NLua "TestExtensionMethods" 单元测试)。

最新更新