8

私の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という名前のメンバーが含まれていません」と表示されます

List< int >やなどのプリミティブ型のリストなど、他の型をPythonに渡すことをテストしましたが、List< string >正常に機能します。

EventIdでは、これらのクラスプロパティにアクセスするにはどうすればよいEventNameですか?Pythonスクリプトではどうすればよいですか?

4

1 に答える 1

15

Eventクラスを公開してみてください。問題は、プロパティがパブリックであるにもかかわらず、internalデフォルトであるため、動的型付けがその型によってのみ宣言されているメンバーを「認識」しないことである可能性があります。

それは単なる推測であり、間違っている場合は、答えを削除して、将来誰かを混乱させないように言ってください。ただし、C#内の別のアセンブリで動的型付けを行うことにより、あるアセンブリで匿名型を使用しても同じ効果が得られます。

于 2012-06-14T21:01:15.687 に答える