mic*_*ael 53 c# parameters params
public void Foo(params string[] values)
{
}
Run Code Online (Sandbox Code Playgroud)
有可能values
是null
,或者总是设置0
或更多的项目?
Jon*_*eet 68
绝对 - 您可以使用类型为string []的参数调用它,其值为null:
string[] array = null;
Foo(array);
Run Code Online (Sandbox Code Playgroud)
Jos*_*ers 37
我决定编写一些代码来为自己测试这个.使用以下程序:
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.
}
}
}
Run Code Online (Sandbox Code Playgroud)
产生以下结果:
strings is null.
strings is not null.
strings is null.
strings is not null.
-------
ints is null.
ints is not null.
ints is null.
Run Code Online (Sandbox Code Playgroud)
所以,是的,与params相关联的数组完全可能为null.
我的第一个猜测是声明默认值为 null 的参数,这在某些情况下是有意义的,但 c# 语言不允许这样做。
static void Test(params object[] values = null) // does not compile
{
}
Run Code Online (Sandbox Code Playgroud)
错误 CS1751:无法指定参数数组的默认值
通过显式传递 null 来绕过此限制的方法已经得到解答。