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 但这不是正确的方法。

4

2 回答 2

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;
}
于 2010-12-15T06:17:21.210 回答
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);
    }
}
于 2010-12-15T07:03:27.680 回答