Python.NET-将Python列表转换为.NET列表(C#)

Python.NET-将Python列表转换为.NET列表(C#),python,c#,python.net,Python,C#,Python.net,我正在使用python.NET在C#中导入一个python列表(字符串),我找不到任何从python.NET动态对象到C#list的转换示例(所有示例似乎都与C#to python方向相反) 我试图用(List)和Enumerable.ToList()强制转换动态python.net对象,但都失败了。as运算符返回null。唯一有效的方法是使用foreach在其上循环。。。但这真的是唯一的方法和最好的解决方案吗 代码如下: using (Py.GIL()) { dynamic MyPyth

我正在使用python.NET在C#中导入一个python列表(字符串),我找不到任何从python.NET动态对象到C#list的转换示例(所有示例似乎都与C#to python方向相反)

我试图用
(List)
Enumerable.ToList()
强制转换动态python.net对象,但都失败了。
as
运算符返回null。唯一有效的方法是使用
foreach
在其上循环。。。但这真的是唯一的方法和最好的解决方案吗

代码如下:

using (Py.GIL())
{
   dynamic MyPythonClass = Py.Import("MyPythonClass")
   dynamic pyList = MyPythonClass.MyList;
   
   //List<string> mylist = (List<string>)pyList;               //failed
   //List<string> mylist = Enumerable.ToList<string>(pyList);  //failed
   //List<string> mylist = pyList as List<string>;             //returns null

   List<string> mylist = new List<string>();
   foreach(string item in pyList)
   {
         mylist.Add(item);                                     //Success !
   }
}

使用(Py.GIL())
{
动态MyPythonClass=Py.Import(“MyPythonClass”)
动态pyList=MyPythonClass.MyList;
//List mylist=(List)pyList;//失败
//List mylist=Enumerable.ToList(pyList);//失败
//List mylist=pyList as List;//返回null
List mylist=新列表();
foreach(pyList中的字符串项)
{
mylist.Add(item);//成功!
}
}
由于@Dave:

string[] mylist = (string[])pyList;

//or

List<string> mylist = ((string[])pyList).ToList<string>();
string[]mylist=(string[])pyList;
//或
List mylist=((字符串[])pyList.ToList();

您试过了吗operator@PrasadTelkikar:刚刚尝试过,它返回null(没有错误),我将更新帖子。我不熟悉这个互操作或python,但这看起来像MyPythonClass。List的运行时类型不是List或不可分配给它。坚持调试器,看看pyList的运行时类型是什么,它实现了IEnumerable,但不是Listmm,实际上查看的是它没有实现IEnumerable的源代码,它利用了foreach语句使用duck类型的一些c#奇怪之处——它不关心接口,只关心GetEnumerator的存在,GetEnumerator必须返回Current和MoveNext()的内容——因此您的强制转换可能永远不会工作,您所做的可能是最好的