我有以下方法:
void MyMethod(params object[] args)
{
}
我尝试使用object[]
类型的参数调用它:
object[] myArgs = GetArgs();
MyMethod(myArgs);
它编译得很好,但在MyMethod
I args == { myArgs}
内部,即一个数组,其中一个元素是我的原始参数。显然我想要args = myArgs
,我做错了什么?
编辑:
Jon Skeet实际上是对的,GetArgs()
确实把东西 Package 在一个元素数组中,抱歉问了个愚蠢的问题。
2条答案
按热度按时间wfveoks01#
你所描述的根本没有发生。编译器不会 * 创建 Package 器数组,除非它需要。这里有一个简短但完整的程序来演示这一点:
根据你的问题,它会打印1,但它不会,它会打印3。
args
的值直接传递给MyMethod
,没有进一步的扩展。要么你的代码不是你发布的那样,要么“ Package ”发生在
GetArgs
中。你可以通过将
args
转换为object
来强制它换行。例如,如果我将Main
的最后一行更改为:... * 然后 * 它打印1,因为它实际上调用了
MyMethod(new object[] { args })
。yi0zb3m42#
以下转换对我有效: