【问题标题】:Is it possible to have an optional parameter be an object in C#? [duplicate]是否可以将可选参数作为 C# 中的对象? [复制]
【发布时间】:2021-01-16 00:39:56
【问题描述】:

例如,假设我想创建一个这样的函数,并希望最后一个参数是可选的(如果提供,则使用它 - 否则只需创建一个新参数并使用它)

public void DoSomething (int x, int y = 5, Search search = new Search())
{
...
}

我得到错误:

"'search' 的默认参数值必须是编译时常量"

所以我尝试将初始值设为常量或只创建一个类成员,但这似乎也不起作用:

private const Search DefaultSearch = new Search();
//OR
private Search DefaultSearch;
public MyClassConstructor()
{
   DefaultSearch = new Search();
}
...
public void DoSomething (int x, int y = 5, Search search = DefaultSearch)
{
...
}

但是由于错误,这些都不起作用。我还尝试使用 ? 使类型 Search 可以为空。但我想这在我的 C# (7.3) 版本中是不允许的。有什么解决办法吗?如果可能的话,我不想放弃并且只使用重载方法。一位同事提到代表可能会完成此操作,但我从未使用过,也无法弄清楚使其在这种情况下工作的语法。

【问题讨论】:

    标签: c# methods parameters delegates


    【解决方案1】:

    你唯一能做的就是与此类似:

    /// <summary>
    /// Does something.
    /// </summary>
    /// <param name="search">The search. If null it is by default <see cref="DefaultSearch"/>.</param>
    //public void DoSomething (int x, int y = 5, Search? search = null)
    public void DoSomething (int x, int y = 5, Search search = null)
    {
      //search ??= DefaultSearch;
      search = search ?? DefaultSearch;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 2010-12-14
      • 2015-03-25
      • 2016-06-19
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 2015-02-28
      • 2014-07-09
      相关资源
      最近更新 更多