2012-06-14 85 views
8

在我的C#代碼中,我有一個類,它存儲了我希望傳遞給列表中的Python代碼的一些數據。但是,當我嘗試訪問我的Python代碼中的那個類的屬性時,我得到MissingMemberException。這裏是一些示例代碼來說明我的意思:訪問IronPython中的C#類成員

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

回答

14

嘗試使Event類公開。問題可能是,雖然屬性是公開的,但類型默認爲internal,因此動態類型不會「看到」僅由該類型聲明的任何成員。

這只是一個猜測,如果它是錯誤的,請說出來,我可以刪除答案,避免在將來混淆任何人。不過,通過在C#中的另一個程序集中動態鍵入,在一個程序集中使用匿名類型的效果相同。

+0

感謝喬恩,那是做的工作。 – peacemaker