params关键字将数组作为单个参数,将数组的内容解释为其所有参数
本文关键字:数组 参数 解释 关键字 单个 params | 更新日期: 2023-09-27 17:59:26
我编写了一个简单的程序,使用params
关键字获取参数并将其写入控制台。当我将一个数组传递给带有params
标记的参数时,我希望/期望发生的事情,以及C#文档中的状态是,该数组将成为params
数组中的第一个元素。以下是一些示例代码:
public static void Main()
{
Paramtest(new object[] { "hi", "wow", 78 });
Console.ReadKey();
}
public static void Paramtest(params object[] args) {
foreach (object o in args) {
Console.WriteLine("{0} is a type of {1}.", o.ToString(), o.GetType());
}
}
我应该看到的是控制台上的一行文字:
System.object[] is a type of System.object[].
我看到的是三行文字:
hi is a type of System.String.
wow is a type of System.String.
78 is a type of System.Int32.
我发现,在数组后面用另一个参数调用Paramtest
,比如Paramtest(new object[] { "hi", "wow", 78 }, String.Empty);
,会产生预期的结果(加上空字符串),所以这可能是解决这个问题的一种方法,但在我的情况下,这不是一个好主意。从文件上看,这不应该发生。对于这个问题,是否有优雅的解决方法?
您可以将参数强制转换为object
:
public static void Main()
{
Paramtest((object)new object[] { "hi", "wow", 78 });
Console.ReadKey();
}
我同意您在文档中指向的示例代码可能会导致一些混乱。这里使用的是对象数组,而示例使用的是整数数组
看看这个答案可以了解发生了什么:C#params object[]奇怪的行为