2010-12-15 9 views
1
dynamic test = new ExpandoObject(); 
test.A = "ok"; 

try{ 
    Console.WriteLine(test.B); 
} 
catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException ex){ 
    // how can i know that B was invoke? 
} 

上記のコードでは、test.Bは 'test'のメンバーではありません。しかし、どのように私は 'B'が呼び出していることを知ることができます。私が見つけた唯一の方法はex.Messageを見ているが、それは適切な方法ではない。expandoオブジェクトのメンバー名を呼び出す方法は?

答えて

2

あなたがDynamicObject代わりのExpandoObjectを使用する場合、それが容易になります。

class MyDynamicObject : DynamicObject 
{ 
    public override bool TryGetMember(GetMemberBinder binder, out object result) 
    { 
     Console.WriteLine(binder.Name); 
     //simply prints the name, you can raise an event here or something else 
     return base.TryGetMember(binder, out result); 
    } 
} 
2

StackFrameを使用してみてください:

catch (Exception e) 
{ 
    StackTrace st = new StackTrace(); 
    StackTrace st1 = new StackTrace(new StackFrame(true)); 
    Console.WriteLine(" Stack trace for Method1: {0}", 
     st1.ToString()); 
    Console.WriteLine(st.ToString()); 
    throw e; 
} 
関連する問題