所以我有一个小的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的导入,但得到相同的结果。
我可能做错了什么,但我似乎无法在网上找到任何有助于解决此问题的文档。
答案 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;单元测试)。