C#中的可选数组参数

本文关键字:数组 参数 | 更新日期: 2023-09-27 18:15:23

可能重复:
传递一个空数组作为c#中可选参数的默认值

我有一个方法,如下所示。当前,参数tags不是可选

void MyMethod(string[] tags=null)
{
   tags= tags ?? new string[0];
   /*More codes*/
}

我想让参数tags可选,就像c#一样,要让参数可选,你可以在方法签名中设置默认值。我尝试了以下技巧,但都没用。

不起作用的代码-1

void MyMethod(string[] tags=new string[0]){}

不起作用的代码-2

void MyMethod(string[] tags={}){}

请告诉我缺少什么。


我已经看到了这个问题:

传递一个空数组作为可选参数的默认值

C#中的可选数组参数

可选参数的文档显示:

默认值必须是以下类型的表达式之一:

  • 常量表达式;

  • 形式为new ValType()的表达式,其中ValType是值类型,例如enumstruct

  • 形式为default(ValType)的表达式,其中ValType是值类型。

由于new string[0]既不是常量表达式,也不是后面跟着值类型的new语句,因此它不能用作默认参数值。

问题中的第一段代码摘录确实是一个很好的解决方法:

void MyMethod(string[] tags = null)
{
   tags = tags ?? new string[0];
   // Now do something with 'tags'...
}

不确定我是否做对了这件事。

  static void Main(string[] args)
        {
                TestMe();
        }

private static void TestMe(string[] param = null)
    {
        if (param == null)
        { 
            Console.WriteLine("its empty");
        }
    }

此外,param的值必须是编译时间常数