Сегодня была такая же проблема. Действительно возможно вызвать методы расширения. Однако синтаксис немного неуклюжий.
Для перечисления удобен метод расширения IEnumerable.ToArray (). Для методов расширения вам необходимо знать, где они определены. В этом случае полная подпись метода System.Linq.Enumerable.ToArray<T>(this IEnumerable<T>)
. Matlab не заботится о модификаторе this
. Однако, поскольку это универсальный метод, вы не можете напрямую использовать его в Matlab. Вместо этого необходим метод NET.invokeGeneric
.
В следующем примере перечисляются значения типа double и преобразовывается результат в массив Matlab.
ret = double(NET.invokeGenericMethod('System.Linq.Enumerable', 'ToArray', ...
{'System.Double'}, enumerableInstance));
Начиная с IQueryable<T> : IEnumerable<T>
, тот же метод (ToArray()
) должен выполнять вашу работу. Не используйте преобразование в двойной массив Matlab и укажите правильный тип элемента (Data.Person
, я полагаю).
Чтобы получить доступ к статическому классу Enumerable, Matlab должен загрузить библиотеку .NET 3.0. Добавить
NET.addAssembly('System.Core');
для этой цели.