params object []方法参数盒装?

时间:2012-07-09 10:53:22

标签: c# object casting params boxing

好的,所以当我的方法看起来像

getPacket(params object[] inputs)
{

 }

输入数组是一个盒装变量数组还是仅仅是原始类型的数组(我发送多个不同类型,例如short,int,bool)

如果它们是盒装的,你可以在不知道原始类型的情况下对原始类型进行运行时拆箱吗?

如果它们没有盒装,我怎么能判断它是int,short,bool等,因为我希望能够创建一个单独的方法,将来自不同类型的整个堆栈的字节数组合在一起。 / p>

另一个问题是,数组中的对象是否与方法调用中传递的顺序相同?

2 个答案:

答案 0 :(得分:2)

数组中的对象将与它们传递给方法的顺序相同,如果source参数是值类型,它们将被装箱。

您可以使用is关键字检查每个对象的基础类型并采取相应措施,例如:

static void Main(string[] args)
{
    Receive(1, true);
}

static void Receive(params object[] values)
{
    foreach (var v in values)
    {
        if (v is int)
        {
            // ...
        }
        else if (v is bool)
        {
            // ...
        }
    }
}

答案 1 :(得分:0)

如果你有一个对象数组,那么是的,如果你把整数放在数组中,它们将被装箱。在不知道所涉及的实际类型的情况下,我不知道任何拆箱方法,因此您必须将数组中的项目转换为它们实际代表的任何值。