2010-12-15 4 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? 
} 

Comme le code ci-dessus, test.B n'est pas membre de 'test'. Mais comment puis-je savoir que 'B' appelle. La seule façon que j'ai trouvé est de regarder ex.Message mais ce n'est pas une bonne façon.Comment appeler le nom de membre de l'objet expando?

Répondre

2

Il sera plus facile si vous utilisez DynamicObject au lieu de 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

Essayez d'utiliser le 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; 
} 
Questions connexes