如何使用动态对象将变量用作方法名称

2023-11-21

在 SignalR 中,HubConnectionContext 中定义了公共属性,如下所示:

public dynamic All { get; set; }

这使得用户可以像这样调用它:All.someMethodName();这太棒了。

我现在想在我的函数中使用传入参数来调用它。我怎样才能做到这一点?

如:All.<my variable as method name>();

有什么办法可以做到这一点吗?

Thanks

EDIT例子:

    public void AcceptSignal(string methodToCall, string msg)
    {
        Clients.All.someMethod(msg);       // THIS WORKS
        Clients.All.<methodToCall>(msg);   // THIS DOES NOT WORK (But I would like it to!)
    }

虽然我喜欢所有有趣的反射答案,但有一种更简单、更快捷的方法可以使用字符串作为方法名称来调用客户端中心方法。

Clients.All, Clients.Others, Clients.Caller, Clients.AllExcept(connectionIds), Clients.Group(groupName), Clients.OthersInGrouop(groupName), and Clients.Client(connectionId)都是动态对象,但它们也都实现了客户端代理界面。

您可以将这些动态对象中的任何一个转换为IClientProxy,然后调用调用(方法名、参数...):

public void AcceptSignal(string methodToCall, string msg)
{

    IClientProxy proxy = Clients.All;
    proxy.Invoke(methodToCall, msg);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用动态对象将变量用作方法名称 的相关文章

随机推荐