【问题标题】:What does it mean when a C# function parameter contains `= null`?当 C# 函数参数包含 `= null` 是什么意思?
【发布时间】:2015-09-13 22:18:30
【问题描述】:

我正在查看MVC tutorial,并在函数开头看到这行代码:

private void PopulateDepartmentsDropDownList(object selectedDepartment = null)

经过测试,我可以看到函数工作,但我不明白函数参数是如何工作的object selectedDepartment = null 是做什么的?

我进行了一般的互联网搜索,但尚未找到答案。

我想我的问题确实有两个方面:

  1. 参数的= null 部分有什么作用?
  2. 这是可以做但不一定应该做的事情吗?

【问题讨论】:

  • 参数的= null 部分使其成为可选参数,将为该参数提供默认值 null。如果您想要允许可选参数的多态方法,它可能是有效的。
  • 对术语的挑剔 - 您所展示的是一个参数。参数总是在方法被声明的地方——arguments总是在方法被调用的地方,提供值。泛型类型参数/类型参数也是如此——在List<T> 的声明中,T 是一个类型参数。当您谈论特定的具体列表类型时,例如List<string> x = new List<string>(); 这里 string 是类型参数。
  • 如果它建议更好的语言使用,这不是挑剔。我会更新问题中的语言。

标签: c# .net optional-parameters


【解决方案1】:

这会将参数设置为默认值(如果未提供),并在未提供参数时防止编译时错误。见:

Setting the default value of a C# Optional Parameter

基本上这个参数现在是可选的,所以你可以通过以下两种方式调用函数:

PopulateDepartmentsDropDownList() //selectedDepartment will be set to null as it is not provided

PopulateDepartmentsDropDownList(myObject) //selectedDepartment will become myObject

【讨论】:

    【解决方案2】:

    表示可以调用

    PopulateDepartmentsDropDownList()
    

    PopulateDepartmentsDropDownList("something")  
    

    都是因为编译器会将第一个转换为

    PopulateDepartmentsDropDownList(null)
    

    此功能称为Optional Arguments

    我建议你阅读this blog post

    【讨论】:

      【解决方案3】:
      1. 这意味着该参数将为空,除非您决定传递一些东西。换句话说,它是可选的。

      2. 是可以做到的,也没什么不好。这是很常见的做法。

      【讨论】:

      • 虽然其他答案更深入地解释了我的问题的第一部分,但这是一个紧凑的答案,解决了我的问题的两个部分。
      【解决方案4】:

      = null 是参数的默认值,它的功能等同于你有

      private void PopulateDepartmentsDropDownList()
      {
          PopulateDepartmentsDropDownList(null);
      }
      
      private void PopulateDepartmentsDropDownList(object selectedDepartment)
      {
           //Your code here.
      }
      

      所以如果你可以调用不带参数的函数PopulateDepartmentsDropDownList(),它将调用1个参数版本并传入null。

      【讨论】:

      • 不等价,是编译时动作,不会生成新的函数签名!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2021-01-09
      相关资源
      最近更新 更多