Невозможно вызвать.Count() IEnumerable расширения из сценария lua, используя 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 и без него, но получил тот же результат.

Я, вероятно, что-то делаю не так, но не могу найти в Интернете какую-либо документацию, которая могла бы помочь в решении этой проблемы.

1 ответ

Решение

Я пытался использовать IEnumerable<T>.ToList() сам метод расширения, но тестирование показывает, что у NLua есть некоторые проблемы с универсальными методами. Вызов метода формы void func<T>(<T> arg) возможно, если вы зарегистрируете его как функцию lua (Lua.RegisterFunction), но если вы попытаетесь вызвать тот же метод для объекта, находящегося в состоянии lua, вы получите ошибку "попытка вызова метода...". Кроме того, метод формы void func<T>(IEnumerable<T> arg) потерпит неудачу в обоих случаях с NullReferenceException и ошибка "попытка вызова метода..." соответственно.

Еще один момент: если вы хотите вызывать методы расширения C# из Lua, вам нужен синтаксис ":", а не "." (см. модульный тест NLua "TestExtensionMethods").

Другие вопросы по тегам