繁体   English   中英

如何解释这个 C# lambda 示例

[英]How to intrepret this C# lambda example

我真的很难理解这段代码是怎么回事,如果有的话,单行 lambda 会返回什么? 我不清楚第三个参数是什么?

   public Task<StatusMessage> MarketSubscription(MarketSubscriptionMessage message)
    {
        int id = NextId();
        message.Id = id;
        message.Op = REQUEST_MARKET_SUBSCRIPTION;
        var newSub = new SubscriptionHandler<MarketSubscriptionMessage, ChangeMessage<MarketChange>, MarketChange>(id, message, false);

        return SendMessage(new RequestResponse(id, message, 
                            success => MarketSubscriptionHandler = newSub));
    }

有关信息,另一种方法是

public RequestResponse(int id, RequestMessage request, Action<RequestResponse> onSuccess)
{
    Id = id;
    Request = request;
    OnSuccess = onSuccess;
}

如果有人能解释如何解释最后一行复杂的代码,我将不胜感激。 谢谢。

那么请求响应:

public RequestResponse(int id, RequestMessage request, Act ion<RequestResponse> onSuccess)
{
    Id = id;
    Request = request;
    OnSuccess = onSuccess;
}

需要 3 个参数和 ID,一条消息和一个要调用的操作,大概是在收到回复时。 Action 采用包含响应的参数,即 RequestResponse 的实例。

调用代码在此处设置此回调 (ACtion)

new RequestResponse(id, message, 
                        success => MarketSubscriptionHandler = newSub)

最后一个参数是动作。 有点奇怪的是它不对响应做任何事情,也不运行任何代码。 它只是将MarketSubscriptionHandler (大概是一个 class 成员变量)设置为newSub 新订阅是

    var newSub = new SubscriptionHandler<MarketSubscriptionMessage, ChangeMessage<MarketChange>, MarketChange>(id, message, false);

我的猜测是,在您显示的代码退出后,另一段代码对 MarketSubscriptionHandler 做了一些事情

在您的示例代码中, SendMessage()的第三个参数是一个名为onSuccess的操作,它似乎是一个委托,在请求成功时/如果请求成功,稍后将调用该委托。

动作的这种用法允许SendMessage()的调用者指定他们喜欢的接收RequestResponse作为参数的任何动作。 调用者可以指定一个操作来记录某些内容、执行另一个方法等,或者在这种情况下,将newSub指定为MarketSubscriptionHandler

基本上发生的事情是:

  1. 消息通过SendMessage()发送
  2. 收到响应后, SendMessage()检查是否应调用onSuccess
  3. 如果响应被视为成功,则调用onSuccess (在这种情况下将newSub指定为MarketSubscriptionHandler )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM