【问题标题】:How to use Optional/Named parameters in C# 4.0如何在 C# 4.0 中使用可选/命名参数
【发布时间】:2011-10-28 02:30:11
【问题描述】:

对于我的生活,我似乎无法理解可选参数的用途。我的意思是,它们将用于什么样的程序,以及如何使用?同样的事情也适用于命名参数,我似乎无法完全掌握任何一件事情。我知道可选参数有助于减少重载方法的数量。就是这样。如果有人可以帮助我完全理解这些用于/如何使用它们,我将不胜感激。

【问题讨论】:

    标签: c#-4.0 optional-parameters named-parameters


    【解决方案1】:

    John 很好地涵盖了可选参数的使用,但要添加对命名参数的说明:如果您有很多可选参数,如果要指定第 6 个,则有两种选择:指定所有较早的可选参数,或者使用命名参数来设置一个特定的参数。

    例子:

    public static void sendEmail(string to, string subject, string body, string[] attachmentFiles = null, bool isHTML = false, string onBehalfOf = "", MailPriority priority = MailPriority.Normal, string BCCAddress = null, bool isWeb = false)
    

    如果我想发送高优先级的电子邮件,我的选择是:

    // If we didn't have optional parameters
    sendEmail("me@me.com", "Important!", "Something broke - fix it!", null, false, "", MailPriority.High, null, false)
    // If we didn't have named parameters
    sendEmail("me@me.com", "Important!", "Something broke - fix it!", null, false, "", MailPriority.High)
    // Using both optional and named parameters to full advantage.
    sendEmail("me@me.com", "Important!", "Something broke - fix it!", priority: MailPriority.High)
    

    这三个中的最后一个更易于使用和稍后阅读。

    【讨论】:

      【解决方案2】:

      我通常在许多不同对象可能调用的方法上使用可选参数。例如,如果您有一个处理搜索的应用程序,您可能有参数

      List<string> SearchStuff(string searchString, Date startDate, Date endDate);
      

      稍后您可能会开始考虑分页并希望将其默认为 25 个结果,但仍允许调用者确定它,并且可以使用可选参数来帮助您,如下所示:

      List<string> SearchStuff(string searchString, Date startDate, Date endDate, int pageSize = 25);
      

      你可以看到的 pageSize 是可选的,通过设置一个值。调用者可以根据需要传递一个 pageSize,也可以将其全部省略,并使用默认值。

      至于命名参数,我不确定我是否在 C# 中使用过它们(或者你是否可以)。然而,在 Objective-c 中,它们经常被使用:

      - (NSString *) getThisFromInteger:(NSInteger)myInteger;
      

      当调用方法时,你实际上是在调用它时输入命名参数

      [self getThisFromInteger: 24];
      

      相对于 C#,这更像是

      self.getThis(24);
      

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        可选参数就是它们的名字:用于可选参数。

        唯一非常重要的是,参数的默认值被编译到调用代码中。 这意味着,如果您更改参数的默认值,您也必须重新编译调用程序集,否则它们仍将使用旧的默认值。

        【讨论】:

          猜你喜欢
          • 2012-10-08
          • 1970-01-01
          • 2011-03-25
          • 1970-01-01
          • 1970-01-01
          • 2019-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多