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

Mar*_*cel 7 c# signalr

在SignalR中,HubConnectionContext中定义了公共属性:

public dynamic All { get; set; }
Run Code Online (Sandbox Code Playgroud)

这使得用户可以称之为:All.someMethodName(); 这很棒.

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

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

有没有办法做到这一点?

谢谢

编辑示例:

    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!)
    }
Run Code Online (Sandbox Code Playgroud)

hal*_*r73 14

虽然我喜欢所有有趣的反射答案,但是使用字符串作为方法名称来调用客户端集线器方法的方法要简单得多.

Clients.All,Clients.Others,Clients.Caller,Clients.AllExcept(connectionIds),Clients.Group(groupName),Clients.OthersInGrouop(groupName),和Clients.Client(connectionId)都是动态对象,但他们也都实现了IClientProxy接口.

您可以将任何这些动态对象强制转换为IClientProxy,然后调用Invoke(methodName,args ...):

public void AcceptSignal(string methodToCall, string msg)
{

    IClientProxy proxy = Clients.All;
    proxy.Invoke(methodToCall, msg);
}
Run Code Online (Sandbox Code Playgroud)