在IronPython中访问C#类成员

时间:2012-06-14 20:58:05

标签: c# ironpython

在我的C#代码中,我有一个类,它存储了一些我希望传递给List中的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< int >List< string >等基本类型的列表,它们工作正常。

那么如何在我的python脚本中访问这些类属性EventIdEventName

1 个答案:

答案 0 :(得分:14)

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

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