我有一个方法需要:
public delegate void SubscriberAction(string a, string b = null);
我的方法
public void Subscribe(SubscriberAction action)
{
var consumer = new EventingBasicConsumer(Channel);
consumer.Received += (model, eventArgs) =>
{
try
{
var body = eventArgs.Body;
action?.Invoke(Encoding.UTF8.GetString(body), eventArgs.RoutingKey);
// The above works when I call it with one or two strings
}
finally
{
Channel.BasicAck(eventArgs.DeliveryTag, false);
}
};
Channel.BasicConsume(Configuration.QueueName, false, consumer);
}
如上所示,当我调用此动作时,它会识别可选参数,并且可以按预期调用它。但是,Subscribe
采用此委托参数的方法不会让我按自己的意愿来称呼它。
所以这行不通:
subscriber.Subscribe(x =>
{
// do stuff
});
仅在我这样做时有效
subscriber.Subscribe((x, y) =>
{
// do stuff
});
最初,我Action<string> action
用作参数,Subscribe
但需要添加一个可选的第二个字符串参数,并且由于Action不允许使用可选参数(如果我输入错了,请更正我),我找到了一个答案,要求使用自定义委托,如上所述。
如何Subscribe
使用一个或两个参数调用该方法?
返回Action<String, String>
并添加另一个Subscribe
方法:
public void Subscribe(Action<string> action) => Subscribe((x, y) => action(x));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句