从C#访问Ironpython字典 [英] Access Ironpython dictionary from C#

查看:121
本文介绍了从C#访问Ironpython字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Ironpython脚本中定义了字典,我想从我的C#中访问该字典 代码.有人可以提供示例代码来实现我的要求.

I have dictionary defined in Ironpython script and I want to access this dictionary from my C# code. Can someone provide example code to achieve my requirement.

对不起,我没有在代码中提及我的问题陈述.

Sorry earlier I did not mention my problem statement with code.

import clr
clr.AddReference("System.Core")
import System
clr.ImportExtensions(System.Linq)
from System.Collections.Generic import Dictionary,List

def check(self):
    dict1 = Dictionary[str,str]
    dict1["a"] = "aa"
    dict2 = Dictionary[str,str]
    dict2["b"] = "bb"
    self[0] = dict1
#   self.Add(dict1)
    return self

C#

var runtime = Python.CreateRuntime();
dynamic test = runtime.UseFile("Test.py");


var myDictList = new List<Dictionary<string, string>>();
var myDL = new List<Dictionary<string, string>>();
myDL = test.check(myDictList);

我的目标是在python中的Dictionary List上进行操作(添加,从列表中删除),然后将其发送回C#,在这里我可以进一步使用它. 我想要的是在python或C#中创建字典列表,然后在(python和C#)两个地方都使用它. 我该怎么办.

My objective is to operate(Add, remove from list) on List of Dictionary in python and send it back to C# where I can use it further. What I want is either create a list of dictionary in python or in C# and use it in both( python and C#) the places. How can I do so.

推荐答案

这有效:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Scripting.Hosting;
using Microsoft.Scripting.Utils;
using Microsoft.Scripting.Runtime;
using IronPython;
using IronPython.Hosting;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ScriptEngine pyEngine = Python.CreateEngine();
            ScriptScope pyScope = pyEngine.CreateScope();
            ScriptSource pyScript = pyEngine.CreateScriptSourceFromString("d = {'a':1,'b':2,'c':3}");
            CompiledCode pyCompiled = pyScript.Compile();
            pyCompiled.Execute(pyScope);
            IronPython.Runtime.PythonDictionary d = pyScope.GetVariable("d");
            Console.WriteLine(d.get("a"));
            Console.Read();
        }
    }
}

应给您键"a"的第一个值.希望这能帮助您前进. 可能有一个或两个包含太多.

Should give you the first value for key 'a'. Hope this gets you going. Possibly there are one or two includes too many.

这篇关于从C#访问Ironpython字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆