我编写了一个使用params
关键字的简单程序来获取参数并将它们写入控制台。我希望/期望发生什么,以及当我将单个数组传递给带有params
标记的参数时C# documentation states会发生什么,该数组将成为{{1}中的第一个元素数组。以下是一些示例代码:
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
,产生预期的结果(加上空字符串),这可能是一种解决方法这个问题,但在我的情况下,这不是优雅或好主意。从文档中说,这不应该发生。这个问题是否有优雅解决方法?
答案 0 :(得分:1)
您可以将参数转换为object
:
public static void Main()
{
Paramtest((object)new object[] { "hi", "wow", 78 });
Console.ReadKey();
}
答案 1 :(得分:1)
我同意您在文档中指出的示例代码可能会导致一些混淆。这里使用的是对象数组,而示例使用的是整数数组,处理方式不同。
看看这个答案,了解最新情况:C# params object[] strange behavior