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, например ::1010*.
from System.Collections.Generic import *
class MyClass(object):
def myMethod(self):
return List[str](['a','list','of','strings'])
здесь myMethod
возвращает непосредственно List<string>
EDIT:
Учитывая, что вы используете .net 2.0 (поэтому нет LINQ), у вас есть два варианта (IMO):
1. Приведите к IList<object>
и используйте его:
IList<object> result = (IList<object>)op.Invoke(method);
PROs : цикл не требуется, вы будете использовать тот же экземпляр объекта, который возвращается скриптом python.
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 : требуется цикл, и преобразованный список является новым экземпляром (не тем, который возвращается скриптом)