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来解决这个限制的方法已经得到了回答。