C# 将数组作为'params'参数传递
我有以下方法:C# 将数组作为'params'参数传递,c#,.net,params,C#,.net,Params,我有以下方法: void MyMethod(params object[] args) { } 我正试图使用类型为object[]的参数调用它: object[] myArgs = GetArgs(); MyMethod(myArgs); 它编译得很好,但是在MyMethodIargs=={myArgs}内部,即一个数组,其中一个元素是我的原始参数。显然,我想要的是args=myArgs,我做错了什么 编辑: Jon Skeet实际上是对的,GetArgs()确实将它包装在一个元素数组中,很
void MyMethod(params object[] args)
{
}
我正试图使用类型为object[]
的参数调用它:
object[] myArgs = GetArgs();
MyMethod(myArgs);
它编译得很好,但是在MyMethod
Iargs=={myArgs}
内部,即一个数组,其中一个元素是我的原始参数。显然,我想要的是args=myArgs
,我做错了什么
编辑:Jon Skeet实际上是对的,
GetArgs()
确实将它包装在一个元素数组中,很抱歉这个愚蠢的问题。您所描述的根本没有发生。除非需要,否则编译器不会创建包装器数组。下面是一个简短但完整的程序,演示了这一点:
using System;
class Test
{
static void MyMethod(params object[] args)
{
Console.WriteLine(args.Length);
}
static void Main()
{
object[] args = { "foo", "bar", "baz" };
MyMethod(args);
}
}
根据你的问题,这会打印1,但它不会,它会打印3。args
的值直接传递给MyMethod
,无需进一步扩展
要么您的代码与发布的代码不同,要么“包装”发生在GetArgs
中
您可以通过将args
强制转换为object
来强制其换行。例如,如果我将Main
的最后一行更改为:
MyMethod((object) args);
。。。然后它打印1,因为它实际上在调用
MyMethod(新对象[]{args})
“但是在mymethodi args=={myArgs}”这意味着什么?为什么不显示该代码?@TimSchmelter,它的意思是:即一个数组,其中一个元素是我的原始参数。object[]
的问题也是object
)@Grzenio:我的问题仍然没有答案,为什么不在方法中显示代码?@Hans:不,这完全不正常。事实并非如此。编译器不需要创建数组时不会创建数组。MyMethod(新的int[]{1,2,3})
打印1
,所以它可能不是对象[]数组。@Dirk:是的,因为int[]
不是对象[]
。它必须把它包起来。OP的代码并不是这样显示的,myArgs
的编译时类型是object[]
,而不是int[]
@Dirk是的,这是因为int是一种值类型,因此不能用作对象array@All我认为德克理解这种区别,他只是简单地提出了一个可能的原因,为什么OPs代码没有按照tin上的说明执行。@Jon你是天才。我不知道一个人怎么能获得这么多知识。