params关键字将数组作为单个参数解释数组的内容作为其所有参数

时间:2016-07-31 15:58:04

标签: c# arrays params

我编写了一个使用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,产生预期的结果(加上空字符串),这可能是一种解决方法这个问题,但在我的情况下,这不是优雅或好主意。从文档中说,这不应该发生。这个问题是否有优雅解决方法?

2 个答案:

答案 0 :(得分:1)

您可以将参数转换为object

public static void Main()
{
    Paramtest((object)new object[] { "hi", "wow", 78 });
    Console.ReadKey();
}

答案 1 :(得分:1)

我同意您在文档中指出的示例代码可能会导致一些混淆。这里使用的是对象数组,而示例使用的是整数数组,处理方式不同。

看看这个答案,了解最新情况:C# params object[] strange behavior