带有可选参数的方法委托在使用单个参数调用时不起作用

Method delegate with optional parameter not working when called with a single parameter

我有一个方法需要:

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 方法?

Return 到 Action<String, String> 并添加另一个 Subscribe 方法:

public void Subscribe(Action<string> action) => Subscribe((x, y) => action(x));