C# 4.0 IRONPYTHON NET4,嵌入式,传递类对象而不是值
我有python代码,它保存在test.py中C# 4.0 IRONPYTHON NET4,嵌入式,传递类对象而不是值,c#-4.0,.net-4.0,ironpython,C# 4.0,.net 4.0,Ironpython,我有python代码,它保存在test.py中 def Process(): list1 = [1, 2, 3] #list object return list1 我还有C代码 List list1=新列表(新int[3]); var runtime=Python.CreateRuntime(); 动态测试=runtime.UseFile(m_sFilename); var list2=test.
def Process():
list1 = [1, 2, 3] #list object
return list1
我还有C代码
List list1=新列表(新int[3]);
var runtime=Python.CreateRuntime();
动态测试=runtime.UseFile(m_sFilename);
var list2=test.Process();
列表1=(列表)列表2 有两种方法可以实现这一点:
保持python“普通”(不含.net/IronPython特定代码,这可能是一项要求):
这将为您提供以下python脚本:
def Process(list):
list1 = [1, 2, 3] #list object
return list1 + list # concatenate lists
和C#代码(请注意如何强制转换到IList
,然后在.net中使用LINQ进行进一步处理。根据数据量/用例,您也可以继续使用IronPython运行时返回的IList):
你的C#看起来像
var dotNetList = new List<int>(new[] { 4, 5, 6 });
dotNetList = test.ProcessDotNetStyle(dotNetList);
var dotNetList=newlist(new[]{4,5,6});
dotNetList=test.ProcessDotNetStyle(dotNetList);
请参见。。。第一次谷歌点击你的例外。。。看起来正是你的问题,我有谷歌这个,它很难罚款的结果!不过还是要谢谢你。除了这是NET2之外,我还想问一下可能有不同方法的NET4。如何为字典做到这一点?看看IronPython.Runtime.PythonDictionary
var m_sFilename = "test.py";
var list = new IronPython.Runtime.List();
list.append(4);
list.append(5);
list.append(6);
var runtime = Python.CreateRuntime();
dynamic test = runtime.UseFile(m_sFilename);
var resultList = test.Process(list);
var dotNetList = ((IList<object>)resultList).Cast<int>().ToList();
import clr
clr.AddReference("System.Core")
import System
clr.ImportExtensions(System.Linq)
from System.Collections.Generic import List
def ProcessDotNetStyle(list):
list1 = List[int]([1, 2, 3])
return list1.Union(list).ToList()
var dotNetList = new List<int>(new[] { 4, 5, 6 });
dotNetList = test.ProcessDotNetStyle(dotNetList);