2012-06-14 13 views
8

In meinem C# -Code habe ich eine Klasse, die einige Daten speichert, die ich in einer Liste an meinen Python-Code übergeben möchte. Wenn ich jedoch versuche, auf Eigenschaften dieser Klasse innerhalb meines Python-Codes zuzugreifen, bekomme ich MissingMemberException. Hier einige Beispiel-Code zu zeigen, was ich meine:Zugreifen auf C# -Klassenmitglieder in IronPython

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 

Die MissingMemberException sagt "Ereignis kein Mitglied enthält namens EventId"

I habe getestet, andere Typen an den Python übergeben, einschließlich Listen von primitiven Typen wie List<int> und List<string> und sie funktionieren gut.

Wie kann ich auf diese Klasseneigenschaften, EventId und EventName in meinem Python-Skript zugreifen?

Antwort

14

Versuchen Sie, die Klasse Event öffentlich zu machen. Das Problem kann sein, dass, obwohl die Eigenschaft öffentlich ist, der Typinternal standardmäßig ist, und so die dynamische Typisierung "nicht sehen" alle Mitglieder, die nur von diesem Typ deklariert werden.

Es ist nur eine Vermutung, und wenn es falsch ist, bitte sagen Sie, damit ich die Antwort löschen und vermeiden kann, dass jemand in der Zukunft verwirrt. Sie erzielen den gleichen Effekt, wenn Sie anonyme Typen in einer Assembly verwenden, indem Sie in einer anderen Assembly dynamisch in C# schreiben.

+0

Danke Jon, das hat den Job gemacht. – peacemaker

Verwandte Themen