【问题标题】:Accessing C# class members in IronPython在 IronPython 中访问 C# 类成员
【发布时间】:2012-06-15 05:01:28
【问题描述】:

在我的 C# 代码中,我有一个类,它存储了一些我希望在列表中传递给我的 python 代码的数据。但是,当我尝试在我的 python 代码中访问该类的属性时,我得到MissingMemberException。这里有一些示例代码来说明我的意思:

C#:

class Event
{
public int EventId { get; set; }
public string EventName { get; set; }
} 

//other processing here...

//this just fills the list with event objects
List<Event> eventList = GetEvents(); 

//this sets a variable in the ScriptScope 
PythonEngine.SetVariable( "events", eventList);

PythonEngine.Execute("eventParser.py");

eventParser.py:

for e in events:
    print e.EventId, " / ", e.EventName

MissingMemberException 表示“事件不包含名为 EventId 的成员”

我已经测试过将其他类型传递给 python,包括基本类型列表,如 List&lt; int &gt; 和 List&lt; string &gt;,它们工作正常。

那么如何在我的 python 脚本中访问这些类属性 EventId 和 EventName?

【问题讨论】:

    标签: c# ironpython


    【解决方案1】:

    尝试公开Event 类。问题可能是虽然 property 是公共的,但 type 默认是internal,因此动态类型不会“看到”任何成员仅由该类型声明。

    这只是一个猜测,如果有错误,请说出来,以便我可以删除答案,以免将来混淆任何人。不过,通过在 C# 中的另一个程序集中动态键入,在一个程序集中使用匿名类型确实可以获得相同的效果。

    【讨论】:

    • 感谢 Jon,完成了这项工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2016-06-03
    • 1970-01-01
    • 2013-12-26
    相关资源
    最近更新 更多