不能将C#Dictionary作为参数传递给ironPython方法

时间:2012-03-16 23:46:39

标签: c# python dictionary parameters ironpython

我需要将存储在字典中的参数列表传递给函数 由ironPython类实现。

我准备了重现错误的最小示例:

        // C# Side
        var runtime = Python.CreateRuntime();
        dynamic test = runtime.UseFile("test.py");

        // Here the parameters dictionary is instantiated and filled
        var parametersDictionary = new Dictionary<string, int>();
        parametersDictionary.Add("first", 1);

        // The Python 'x' instance is called passing parameter dictionary
        var result = test.x.ReturnFirstParameter(parametersDictionary);

现在是Python代码:

# Python side

# Class 'Expression' definition
class Expression(object):
    def ReturnFirstParameter(self, **parameters):
        return parameters['first']

# Class 'Expression' instantiation
x = Expression()

当我运行程序时,我得到以下异常:

ReturnFirstParameter() takes exactly 1 argument (2 given)

第一个参数是'self',但似乎无视它接收 2个参数,'self'和字典。

我尝试更改其他参数的字典,效果很好。问题 只有在收到**参数时才会出现。

我非常感谢你的帮助!

埃斯特。

1 个答案:

答案 0 :(得分:1)

只需从Python代码中的**前面删除parameters即可:

class Expression(object):
    def ReturnFirstParameter(self, parameters):
        return parameters['first']
将命名参数传递给函数时,应使用

**,并且C#代码将传递字典。

您的C#代码将调用此函数:

x.ReturnFirstParameter({'first': 1})

要使其与**parameters一起使用,则需要

x.ReturnFirstParameter(first=1)

使用ironpython可能有办法做到这一点,但我不确定如何。