C# – 是否有可能有空参数?

public void Foo(params string[] values) { } 

values可能是null ,还是总是被设置为0或更多的项目?

绝对 – 你可以用一个string []types的参数来调用它,其值为null:

 string[] array = null; Foo(array); 

我决定写一些代码来为我自己testing。 使用以下程序:

 using System; namespace TestParams { class Program { static void TestParamsStrings(params string[] strings) { if(strings == null) { Console.WriteLine("strings is null."); } else { Console.WriteLine("strings is not null."); } } static void TestParamsInts(params int[] ints) { if (ints == null) { Console.WriteLine("ints is null."); } else { Console.WriteLine("ints is not null."); } } static void Main(string[] args) { string[] stringArray = null; TestParamsStrings(stringArray); TestParamsStrings(); TestParamsStrings(null); TestParamsStrings(null, null); Console.WriteLine("-------"); int[] intArray = null; TestParamsInts(intArray); TestParamsInts(); TestParamsInts(null); //TestParamsInts(null, null); -- Does not compile. } } } 

得出以下结果:

 strings is null. strings is not null. strings is null. strings is not null. ------- ints is null. ints is not null. ints is null. 

所以是的,与params相关的数组是完全可能的。

除了乔恩的回答,你也可以有这样的东西:

 string[] array1 = new string[]; //array is not null, but empty Foo(array1); string[] array2 = new string[] {null, null}; //array has two items: 2 null strings Foo(array2); 

我的第一个猜测是声明参数的默认值为null,这在某些情况下是合理的,但是c#语言不允许这样做。

 static void Test(params object[] values = null) // does not compile { } 

错误CS1751:无法为参数数组指定默认值

通过显式传递null来解决这个限制的方法已经得到了回答。