如何获取expando对象的调用成员名称?

发布于 2024-10-07 15:29:44 字数 306 浏览 6 评论 0原文

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

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?
}

As code above, test.B is not a member of 'test'. But how can i know 'B' is calling. The only way i found is looking into ex.Message but it's not a proper way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

感情废物 2024-10-14 15:29:44

如果您使用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);
    }
}

It will be easier if you use DynamicObject instead of 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);
    }
}
情未る 2024-10-14 15:29:44

尝试使用 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;
}

Try using the 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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文