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

C# params关键字将数组作为单个参数将数组的内容解释为其所有参数,c#,arrays,params,C#,Arrays,Params,我已经编写了一个简单的程序,使用params关键字获取参数并将其写入控制台。我希望/期望发生的事情,以及当我将单个数组传递给带有params标记的参数时将发生的事情是,该数组将成为params数组中的第一个元素。以下是一些示例代码: public static void Main() { Paramtest(new object[] { "hi", "wow", 78 }); Console.ReadKey(); } public

我已经编写了一个简单的程序,使用
params
关键字获取参数并将其写入控制台。我希望/期望发生的事情,以及当我将单个数组传递给带有
params
标记的参数时将发生的事情是,该数组将成为
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(新对象[]{“hi”,“wow”,78},String.Empty),生成预期的结果(加上空字符串),因此这可能是解决此问题的一种方法,但在我的情况下,这不是一种优雅或好主意。从文件上看,这不应该发生。是否有解决此问题的方法?

您可以将参数强制转换为
对象

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

您可以将参数强制转换为
对象

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

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


查看此答案以了解发生了什么:

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

查看此答案以了解发生了什么:

可能重复的是,我认为它是:(不幸的是,我在发布问题之前进行研究时没有看到该帖子。可能重复的是,我认为它是:(不幸的是,我在发布问题之前进行研究时没有看到该帖子。