[英]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
。
基本上发生的事情是:
SendMessage()
发送SendMessage()
检查是否应调用onSuccess
。onSuccess
(在这种情况下将newSub
指定为MarketSubscriptionHandler
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.