Ответ 1
IronPython.Runtime.List
реализует следующие интерфейсы:
IList, ICollection, IList<object>, ICollection<object>, IEnumerable<object>, IEnumerable
чтобы вы могли применить к одному из этих типов, затем перейдите в List<string>
.
List<string> result = ((IList<object>)op.Invoke(method)).Cast<string>().ToList();
Кстати, возможно, вы знаете об этом, но вы также можете использовать .NET-типы в IronPython, например:
from System.Collections.Generic import *
class MyClass(object):
def myMethod(self):
return List[str](['a','list','of','strings'])
здесь myMethod
возвращает непосредственно a List<string>
EDIT:
Учитывая, что вы используете .net 2.0 (так нет LINQ), у вас есть два варианта (IMO):
1. Вставить в IList<object>
и использовать его:
IList<object> result = (IList<object>)op.Invoke(method);
PROs: не требуется цикл, вы будете использовать тот же экземпляр объекта, который возвращается python script.
CONs: нет безопасности типа (вы будете похожи на python, поэтому вы можете добавить в список не строку)
2. Преобразовать в List<string>
/IList<string>
:
IList<object> originalResult = (IList<object>)op.Invoke(method);
List<string> typeSafeResult = new List<string>();
foreach(object element in originalResult)
{
typeSafeResult.Add((string)element);
}
PROs: введите безопасный список (вы можете добавить только строки).
CONs: для этого требуется цикл, а преобразованный список - это новый экземпляр (не тот, который был возвращен script)