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

时间:2015-06-19 13:53:02

标签: linq nlua

所以我有一个小的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' (字符串值)。

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

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

1 个答案:

答案 0 :(得分:2)

我一直在尝试使用IEnumerable<T>.ToList()扩展方法,但是测试显示NLua在泛型方法方面存在一些问题。如果将其注册为void func<T>(<T> arg),则可以调用Lua.RegisterFunction形式的方法一个lua函数(void func<T>(IEnumerable<T> arg)),但是如果你尝试在lua状态下出现的对象上调用相同的方法,你会得到&#34;尝试调用方法...&#34;错误。此外,NullReferenceException形式的方法在int result = 0; using (SqlConnection connect = new SqlConnection(connectionString)) { string insertQuery = @"Insert Into Conversions (CID, Source, Destination, Packages, CreatedBy, SourceID) SELECT @CID, @Source, @Destination, @Packages, @CreatedBy, @SourceID"; SqlCommand command = new SqlCommand(insertQuery, connect); command.Parameters.AddWithValue("CID", cidBox.Text); command.Parameters.AddWithValue("Source", sourceSoftwareBox.Text); command.Parameters.AddWithValue("Destination", destinationSoftwareBox.Text); command.Parameters.AddWithValue("Packages", packagesBox.Text); command.Parameters.AddWithValue("CreatedBy", Environment.UserName); command.Parameters.AddWithValue("SourceID", sourceID.sourceID); connect.Open(); result = Convert.ToInt32(command.ExecuteScalar()); } 和&#34;尝试调用方法的情况下都会失败...&#34;错误,分别。

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