【问题标题】:Make argument compulsory or optional base on calling method根据调用方法使参数强制或可选
【发布时间】:2018-04-22 01:03:45
【问题描述】:

我有这个方法

public void downloadAndSendFile(string fileType,
                                bool IsSendMail = false, 
                                string toEmail = "", 
                                string subject = "")
{
}

我想这样做,

  • 如果用户在调用此方法时传递了IsSendMail = true,则toEmailsubject 参数是强制性的

【问题讨论】:

  • 为什么不能使用if-else 块来检查和验证这一点?
  • for if else block 它需要通过 SendMail, toEmail="", subject="" 。我不想在调用方法时做这种事情

标签: c# function methods arguments parameter-passing


【解决方案1】:

改用方法的 2 个重载怎么样?

public void downloadAndSendFile(string fileType)

public void downloadAndSendFile(string fileType,
                            string toEmail, 
                            string subject)

我的理由是你根本不需要IsSendMail 参数。它只表明方法调用中是否还会有 2 个参数。如果仅此而已,为什么不将其删除并根据传入的参数做不同的事情呢?如果需要方法内部IsSendMail的值,可以假设第二次重载为真,第一次重载为假。

【讨论】:

    【解决方案2】:
     public void downloadAndSendFile(string fileType,
                                bool IsSendMail, 
                                string toEmail, 
                                string subject)
    {
      if(IsSendMail)
      {
          ... code ... 
        Console.WriteLine(toEmail + subject);
      }
      else
     {
          ... code ... 
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 2012-02-23
      相关资源
      最近更新 更多