1

ここに、動的オブジェクトを含む引数で発生するイベントがあります。これは、イベント呼び出し自体で直接作成された匿名オブジェクトです。

if(MyEvent != null) MyEvent(this, new SensoricDataEventArgs { Data = new { Action = "Start", Team = "Blau" } });

SensoricDataEventArgsの署名は次のようなものです

class SensoricDataEventArgs : EventArgs {
  public dynamic Data { get; set; }
}

ハンドラー (関連する場合は別のアセンブリにあります) でそのデータにアクセスしようとすると、 Data プロパティを再キャストしても、オブジェクトにActionの定義がないという例外が返されます。動的動的オブジェクトの DebuggerVisualizer でさえ、オブジェクトにプロパティActionがあることを示しています。

ただし、前述の例外が発生します。

これは、デバッガーからの情報と一緒に、イベント ハンドラーで実行しようとしていることのイメージです。イメージでは、デバッガーはブレークポイントで停止しています。次のステップで例外がスローされます。

この例外の原因について何か考えはありますか? 私は何を間違っていますか? MyEvent ハンドラ

4

2 に答える 2

3

問題は、匿名型が宣言されinternalているため、アクセスしようとしているメンバーが他のアセンブリに表示されず、DLR が実行時にメンバーのアクセシビリティについて実際に同じコンパイル時分析を行うことです。コンパイル時にアクセスできなかったものに実行時にアクセスすることはできません。匿名型が isであることinternalを確認し、 a をスローしRuntimeBinderExceptionます。

1 つの解決策は、 を使用するのではなく、リフレクション コードを明示的に記述することですdynamic。より保守しやすく長期的な解決策はdynamic、イベント引数から削除し、コンポーネントが相互に通信する方法をより正確に定義することです。

于 2013-04-21T09:30:29.677 に答える