Как использовать параметры с одинаковыми именами в зависимости от их применения?

У меня есть метод, который должен принимать либо SubscriptionsPageViewModel, либо SubscriptionsTreePageViewModel.

Я не понимаю, как дать возможность методу иметь эти два параметра:

public Task<MqttClientPublishResult> Publish( SubscriptionsPageViewModel options, SubscriptionsTreePageViewModel options )
{                                                                                                                         
    if ( options == null ) throw new ArgumentNullException( nameof( options ) );                                          
                                                                                                                          
    ThrowIfNotConnected();                                                                                                
                                                                                                                          
    var applicationMessage = new MqttApplicationMessageBuilder()                                                          
        .WithTopic(options.Topic)                                                                                         
        .WithPayload(options.GeneratePayload())                                                                            
        .Build();                                                                                                         
                                                                                                                          
    return _mqttClient.PublishAsync( applicationMessage );                                                                
}                   

У меня просто есть метод для отправки сообщений и он использует вьюмодель, в которой находится:

public async Task Publish()                                         
{                                                                   
    try                                                             
    {                                                               
        var result = await _mqttClientService.Publish( this );      
    }                                                               
    catch (Exception exception)                                     
    {                                                               
        App.ShowException( exception );                             
    }                                                               
}     

                                                                                                                                                                

Ответы (1 шт):

Автор решения: Igor
public Task<MqttClientPublishResult> Publish(SubscriptionsPageViewModel options)
{
  if (options == null)
    throw new ArgumentNullException(nameof(options));

  return Publish(options.Topic, options.GeneratePayload());
}

public Task<MqttClientPublishResult> Publish(SubscriptionsTreePageViewModel options)
{
  ...
}

private Task<MqttClientPublishResult> Publish(Topic topic, Payload payload)
{
  ThrowIfNotConnected();

  var applicationMessage = new MqttApplicationMessageBuilder()
    .WithTopic(topic)
    .WithPayload(payload)
    .Build();

  return _mqttClient.PublishAsync( applicationMessage );
}

Потому что я добрая

interface ISubscriptionsViewModel 
{
   Topic Topic { get; set; }
   Payload GeneratePayload();
}

class SubscriptionsPageViewModel : ISubscriptionsViewModel 
{
  ...
}

class SubscriptionsTreePageViewModel : ISubscriptionsViewModel 
{
  ...
}

public Task<MqttClientPublishResult> Publish(ISubscriptionsViewModel options)
{  
  ...
}
→ Ссылка