2012-01-21 3 views
0

私は本当に奇妙な問題があります。私は、新しいコンソールアプリケーションを作成し、コードを入れても私のソリューションで新しいコンソールアプリケーションを作成し、同じコードを正確に貼り付けている場合は、以下のコードはうまく動作します。こんにちは。私の既存の解決策では、コードはTryGetMember()に決して行きません。c#あるソリューションから別のソリューションへの動的な振る舞い

これは本当に私を悩ましています。ソリューションは大きすぎて新しいソリューションに移行することはできませんが、それを修正するとは確信していません。すべての参照が機能しないコンソールアプリケーションでは、動作するアプリケーションと同じです。唯一の違いは解決策ではないということです。全体のソリューションはダイナミクスと同じように動作しています。面白いのはこれが動作していたのですが、突然停止するので、私はこの単純なプログラムを作成して理論をテストします。

編集:デバッガを接続しないと、ソリューションで動作しないアプリケーションが正常に動作します(Ctrl + F5)。

アイデア?

using System.Collections; 
using System.Collections.Generic; 
using System.Dynamic; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      IDictionary<string, object> dictionary = new Dictionary<string, object>(); 
      dictionary["hello"] = "world"; 
      dynamic d = new MyDynamicModel(dictionary); 
      var a = d.hello; 
     } 

    } 

    public class MyDynamicModel : DynamicObject 
    { 
     private IDictionary<string, object> Values { get; set; } 
     public MyDynamicModel(IDictionary<string, object> dict) 
     { 
      Values = dict; 
     } 

     public override bool TryGetMember(GetMemberBinder binder, out object result) 
     { 
      return Values.TryGetValue(binder.Name, out result); 
     } 
    } 
} 
+0

これは正常にあなたのコード –

+0

の辞書に値が辞書に追加されているかどうかをチェックします。 - 作業中のプロジェクトをソリューションにインポートするとうまく動作しません – Jon

+0

DynamicObjectは実際のコードで使用しているタイプですか?これは主に内部メンバーのアクセシビリティで起こります... –

答えて

0

スローされた例外を打破するためのビジュアルスタジオセットアップがあるようです。ダイナミクスを使用するだけで、より多くの例外がスローされて処理され、動的オブジェクトを含むC#オブジェクトを扱う際には、 C#バインダは常に静的なバージョンを最初に呼び出すようなことをしようとします。その後、メンバーを見つけることができず、動的バージョンのために再度試みるRuntimeBindingExceptionをスローします。

Debug > Exceptionsの下では、ThrownがRuntimeBinderExceptionまたはすべてのCLR例外でチェックされていないことを確認してください。

関連する問題